Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

string freemem [D7, XP]


QAZ ©   (2010-02-17 17:43:00) 

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


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

Finalize


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


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

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

S := '';
;-)


oxffff   (2010-02-17 22:04:00) [3]


> 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 21:48:00) [4]


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

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

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


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

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


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


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

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

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

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

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

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


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

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


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

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


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

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

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


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

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

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


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


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

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

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


jack128_   (2010-02-17 18:02:00) [12]


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

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


QAZ   (2010-02-17 17:59:00) [13]


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

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


> FreeMem(P);

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


jack128_   (2010-02-17 17:50:00) [14]

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

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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо