Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

string freemem   Найти похожие ветки 

 
QAZ   (2010-02-17 17:43) [0]

как принудительно удалить строку из памяти в обход "внутренних механизмов" дельфи


 
jack128_   (2010-02-17 17:50) [1]

Мазахист???  Бывает.

var
 S: string;
 P: Pointer;
begin
 SetLength(S, 100);
 P := Pointer(Integer(Pointer(S)) - 8);
 FreeMem(P);
 Pointer(S) := nil;  // отключаем стандартный механизм.
end;


ЗЫ  А зачем нужны такие извращения??


 
QAZ   (2010-02-17 17:59) [2]


> ЗЫ  А зачем нужны такие извращения??

штоб поработить челавеков


> FreeMem(P);

а разве эта штука коректно работает без предварительных ласк с GetMem ?


 
jack128_   (2010-02-17 18:02) [3]


> а разве эта штука коректно работает без предварительных
> ласк с GetMem ?

а ты думаешь память под строку как то иначе выделяется??


 
QAZ   (2010-02-17 18:08) [4]


> а ты думаешь память под строку как то иначе выделяется??

а если менеджер памяти не делфийский?

ЗЫ до кучи
как поместить string по конкретному адресу в памяти зная диапазон памяти?


 
Медвежонок Пятачок ©   (2010-02-17 19:13) [5]

а если менеджер памяти не делфийский?

тогда и самой string не будет


 
Медвежонок Пятачок ©   (2010-02-17 19:15) [6]

как поместить string по конкретному адресу в памяти зная диапазон памяти?

StrLCopy предварительно нацелив PChar на нужную память


 
Медвежонок Пятачок ©   (2010-02-17 19:16) [7]

тока это уже не будет типом string


 
Германн ©   (2010-02-17 19:26) [8]

Сейчас автор скажет еще что это надо проделать в чужом приложении.


 
QAZ   (2010-02-17 19:43) [9]


> тогда и самой string не будет

почемуйто ? менеджеров существует много и везде работает string

> StrLCopy предварительно нацелив PChar на нужную память

ну это не интересно,надо со string

> Сейчас автор скажет еще что это надо проделать в чужом приложении.

не скажу,телепатический сеанс не удался


 
Игорь Шевченко ©   (2010-02-17 20:12) [10]

http://ln.com.ua/~openxs/articles/smart-questions-ru.html


 
jack128_   (2010-02-17 21:48) [11]


> а если менеджер памяти не делфийский?

GetMem/FreeMem выделяет память текущим манагером памяти. Под манагером памяти я имею в виду соответствующий рекорд в модуле System. так что без разницы используешь ты стандартный манагер или же сторонний.

Но вообще мой подход - это жесткий и ненужный хак. ну и конечно он не гарантирует от AV, потому что на освобожденную память могут ссылаться сколько угодно строк..


 
oxffff ©   (2010-02-17 22:04) [12]


> jack128_   (17.02.10 17:50) [1]
> Мазахист???  Бывает.
>
> var
>  S: string;
>  P: Pointer;
> begin
>  SetLength(S, 100);
>  P := Pointer(Integer(Pointer(S)) - 8);
>  FreeMem(P);
>  Pointer(S) := nil;  // отключаем стандартный механизм.
> end;
>
> ЗЫ  А зачем нужны такие извращения??


Для констатных строк это не сработает, и будет ошибкой.
Да, да, а кто счетчик проверять будет? :)


 
jack128_   (2010-02-17 22:32) [13]


> Для констатных строк это не сработает, и будет ошибкой.
> Да, да, а кто счетчик проверять будет? :)

ну я ж сказал, вероятность AV есть. а если нужно проверять счетчик и чекать константы, то думаю подойдет такой код:

S := "";
;-)


 
QAZ   (2010-02-18 19:55) [14]

Finalize



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.064 c
2-1268472453
Первокурсница
2010-03-13 12:27
2010.08.27
Программа "Защита от дураков", оператор case


2-1270871051
tippa
2010-04-10 07:44
2010.08.27
Synchronize и критические секции


2-1271436066
@!!ex
2010-04-16 20:41
2010.08.27
Где я в хуке накосячил??


2-1273775590
Германн
2010-05-13 22:33
2010.08.27
MessageDlg и русские буквы


6-1223380302
gaux
2008-10-07 15:51
2010.08.27
Indy 10.1.5 + SSL. Получить код ошибки OpenSSL в OnVerifyPeer





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский