Так как мы программируем на Borland Delphi, то мы знаем, что за выделение и освобождение памяти в программе отвечают GetMem и FreeMem соответственно. На первый взгляд, написание своих аналогичных методов позволит контролировать процесс выделения и освобождения памяти. Например, вот так:
procedure MyGetMem(var P: Pointer; Size: Integer);
begin
// Здесь вставляем свой код
GetMem(P, Size);
end;
procedure MyFreeMem(var P: Pointer);
begin
// Здесь вставляем свой код
FreeMem(P);
end;
Ты скажешь, что вот и само решение, но могу заверить, что это не так, если ты используешь объекты и классы! Как ты заставишь систему для выделения и освобождения памяти использовать твои методы? Она не знает об их существовании!
А теперь вспомним о модуле ShareMem, который каким-то образом заставляет систему понимать свои GetMem и FreeMem. Вот тут и есть ответ на решение. Достаточно переопределить менеджер памяти в системе!
Ну а дальше всё просто. Берём и считаем количество вызовов GetMem и FreeMem. Если по завершению работы твоей программы этот счётчик не нулевой, то значит у тебя в программе есть утечка памяти.
Если тебе интересно, как реализован модуль проверки утечки памяти, то щёлкай здесь.
18.10.2005 |