Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.042 c
2-1270035677
Валигози2
2010-03-31 15:41
2010.08.27
Способ задания порядка записей


15-1273012753
Игорь
2010-05-05 02:39
2010.08.27
madCodeHook


15-1265841005
Юрий
2010-02-11 01:30
2010.08.27
С днем рождения ! 11 февраля 2010 четверг


15-1261482460
Piter
2009-12-22 14:47
2010.08.27
Win32/Kryptik троян подцепил


15-1268649323
Из батника
2010-03-15 13:35
2010.08.27
Удаление каталога




   Наверх