того же блока памяти. Скачал самую последнюю версии 4.993. Настроил FullDebugMode, подкинул отладочную DLL-ку, добавил к проекту детальную отладочную информацию плюс она встраивается внутрь EXEшника, подключил FastMM4 самым первым модулем в DPR.
Проверил, формируется ли отладочный лог "ProjectTestMM_MemoryManager_EventLog.txt" - да он формируется, если есть утечка и я закрываю программу.
При создании формы выделаю память GetMem(p, 10);
При нажатии кнопки освобождаю память FreeMem(p);
Так вот, при повторном нажатии кнопки выдаётся ошибка AccessViolation.
Валится при обращении к LPSmallBlockPool.BlockType.BlockSize в функции GetAvailableSpaceInBlock (в этот момент BlockType=nil)
Т.е. и близко не пахнет какими-то способностями FastMM4 диагностировать повторное уничтожение объекта. Т.е. оно не тупо не работает? А как заставить?
Версия Delphi 2007.
{$ifdef Release} {Specify the options you use for release versions below} {$undef FullDebugMode} {$undef CheckHeapForCorruption} {$define ASMVersion} {$undef EnableMemoryLeakReporting} {$undef UseOutputDebugString} {$define NoMessageBoxes} {$else} {Specify the options you use for debugging below} {$define FullDebugMode} {$define EnableMemoryLeakReporting} {$define UseOutputDebugString} {$define CheckHeapForCorruption} {$define ClearLogFileOnStartup} {$endif} у меня так
Добавил CheckHeapForCorruption. Не помогло Можешь проверить, оно работает? Код простейший: var Form3: TForm3; p: PInteger; implementation {$R *.dfm} procedure TForm3.Button1Click(Sender: TObject); begin FreeMem(p); end; procedure TForm3.FormCreate(Sender: TObject); begin GetMem(p, 10); end;
Обсуждают сегодня