Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.068 c
2-1268305355
fford
2010-03-11 14:02
2010.08.27
копировать текст из RichEdit в поток


2-1270570317
dis12345
2010-04-06 20:11
2010.08.27
горячие клавиши F1 F2


2-1269350538
Nik
2010-03-23 16:22
2010.08.27
DevExpress VerticalGrid cxMemo


15-1271364443
pokey
2010-04-16 00:47
2010.08.27
Регистрация в QIWI


2-1273173878
glikozid
2010-05-06 23:24
2010.08.27
Обращение к StringGrid из другой формы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский