Главная страница
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.49 MB
Время: 0.054 c
15-1272832202
Юрий
2010-05-03 00:30
2010.08.27
С днем рождения ! 3 мая 2010 понедельник


2-1272273312
HF-Trade
2010-04-26 13:15
2010.08.27
положение TStatusBar после SW_Restore


11-1221509060
tsugi
2008-09-16 00:04
2010.08.27
D2009


2-1269701259
Semnich
2010-03-27 17:47
2010.08.27
Помогите с задачкой


4-1236677806
Demo_nik
2009-03-10 12:36
2010.08.27
как перехватить функцию копирования