HeapTrace

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

HeapTrace

Сообщение giao » 23.05.2010 16:57:38

Привет всем! Есть код (работа с указателями), возник вопрос с контролем утечек памяти. Когда компилирую с модулем HeapTrc (опция -gh), то при запуске программа вылетает с ошибкой, если же -gh убрать, то все считает нормально. Эт что такое? - не пойму.
И еще вопрос: p:= AllocMem(size) - выделяет память для p размером size, а FreeMem(p) - освобождает. Тогда, почему после FreeMem данные все еще хранятся в памяти и к ним можно обратиться? Под Делфями то же самое. Может ли это быть из-за того, что р - указатель на record?
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина

Re: HeapTrace

Сообщение скалогрыз » 23.05.2010 17:01:37

giao писал(а):И еще вопрос: p:= AllocMem(size) - выделяет память для p размером size, а FreeMem(p) - освобождает. Тогда, почему после FreeMem данные все еще хранятся в памяти и к ним можно обратиться? Под Делфями то же самое. Может ли это быть из-за того, что р - указатель на record?


потому что "освобождение памяти" не означает немедленно затирание области памяти которая была выделена. Освобождение данных, говорит менеджеру памяти, о том, что указанная область более не нужна, и может быть использована менеджером памяти, по его усмотрению.
В итоге, опираться на достоверность данных в освобождённой области нельзя, потому что они могут быть стёрты после любой операции или вызова функции.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: HeapTrace

Сообщение Odyssey » 23.05.2010 19:53:15

giao писал(а):Когда компилирую с модулем HeapTrc (опция -gh), то при запуске программа вылетает с ошибкой, если же -gh убрать, то все считает нормально.

Есть предположение, что HeapTrc пытатется писать в консоль, которая не создана. Если ОС = Windows, попробуйте убрать опцию -WG, или первой строчкой проекта вызвать что-то типа
Код: Выделить всё
SetHeapTraceOutput('memoryleaks.txt');

Если не поможет, то текст ошибки в студию.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: HeapTrace

Сообщение giao » 23.05.2010 21:35:02

Odyssey:
Код: Выделить всё
SetHeapTraceOutput('memoryleaks.txt');

помогло, спасибо
giao
новенький
 
Сообщения: 46
Зарегистрирован: 24.11.2009 22:33:18
Откуда: Украина


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru