|
[D1,D2,D3,D4,D5,D6,D7,D8, D2005W, D2005N, D2006W, D2006N, D2007W, D2009W, D2010W, DXEW]
The Memory Report helps you find possible memory leaks in your code.
__________________________________________________
Local objects with unprotected calls to Free
This section reports locations where calls to Free (and FreeAsNil or Release) are not done in try-finally blocks. Failure to wrap a try-finally block around a memory deallocation could result in a memory leak. The report does not list locations in FormDestroy and FormClose events, because these are normally called when a form is destroyed. Neither does it report calls to Free from a finalization block. Also an object that is freed in a try-except block is not reported.
__________________________________________________
Non-local objects with unprotected calls to Free
Like the previous section, but for non-local objects.
__________________________________________________
Objects created in try-structure
This section lists lists locations where an object is created inside a try-structure, like:
try
Obj := TMyObject.Create;
…
finally
Obj.Free;
end;
Here, Obj should be created before the “try”, otherwise Obj.Free will be called even if the object fails to create, possibly causing a runtime error.
__________________________________________________
Unbalanced Create/Free
This section reports objects that are not created and freed the same number of times.
This can indicate an error, like in the following example:
procedure LocalProc;
var
Obj : TMyClass;
begin
Obj := TmyClass.Create;
Obj.DoSomething;
end;
Here, the locally declared object Obj is never freed, so this code will cause a memory leak.
__________________________________________________
Local objects that are created more than once without being freed in-between
This section reports objects that are created more than once (in a row) without being freed in-between.
This leads to memory leakage, like in the following example:
procedure LocalProc;
var
Obj : TMyClass;
begin
Obj := TMyClass.Create;
try
Obj := TMyClass.Create;
try
..
finally
FreeAndNil(Obj);
end;
..
finally
FreeAndNil(Obj);
end;
end;
Here, the locally declared object Obj is only freed once, which causes a memory leak.
See also:
General Reports
|