Проверка, выделена ли память перед вызовом FreeMem (Delphi 32) - PullRequest
1 голос
/ 13 июля 2010

Я сталкивался с ошибками, когда объекты каким-то образом освобождались, но в итоге мы вызываем FreeMem для них. Конечно, это вызывает ошибку, поскольку память уже была освобождена, и выдает ошибку.

Я знаю, что блок try-catch, вероятно, исправит это, но это много блоков try-catch. С обычным object.free способ избежать этого - FreeAndNil (объект), но я не могу найти эквивалент для FreeMem. Что-то, что проверяет, выделено оно или нет перед освобождением.

Какое лучшее решение здесь для простоты чтения, удобства обслуживания и стабильности.

Ответы [ 2 ]

7 голосов
/ 13 июля 2010

Эквивалентом FreeAndNil будет просто

FreeMem(p);
p := nil;

Но вы лучше исправите реальную проблему, найдя, какой объект вы используете после его освобождения.Попробуйте FastMM - он поможет вам с этой задачей.

0 голосов
/ 13 июля 2010

Вы все равно не должны вызывать FreeMem для объекта. Его нужно уничтожить деструктором, вызвав на него Free. Но если вы работаете с указателями на другие вещи (например, на записи), следуйте тому, что сказал Ульрих. (Обе части этого.)

...