Según FastMM4, el programa Delphi en el que estoy trabajando en este momento está filtrando muchas cosas. AnsiStrings para ser precisos:Aplicación de Delphi con fuga de AnsiStrings
La aplicación (http://sourceforge.net/projects/orwelldevcpp/) usado para filtrar mucho más de otros tipos de datos, pero podría reportar FastMM4 donde se creó la instancia, por lo que logró arreglar eso. Lo extraño es que FastMM4 no informa la ubicación de estas fugas en absoluto.
Editar: parece que sí, después de todo, ver las respuestas para la solución. De todos modos, la pregunta sigue en pie: ¿cómo demonios estoy filtrando estas cosas?
Entonces, ehm, desafortunadamente, no tengo idea de qué buscar. Quiero decir, si estas cosas salen de su alcance, deberían liberarse automáticamente de manera correcta (a pesar de que están en el montón).
Logré rastrear algunas filtraciones por comentarios aleatorios y ver qué pasaría con los conteos. He aquí un ejemplo:
// simply passing it a constant creates a leak...
MainForm.UpdateSplash('Creating extra dialogs...');
procedure TMainForm.UpdateSplash(const text : AnsiString);
begin
if not devData.NoSplashScreen then // even if this branch is NOT taken
SplashForm.Statusbar.SimpleText := 'blablabla' + text;
end;
// And even if the function call itself is placed within a NOT taken branch!
Aquí hay otro ejemplo de una fuga:
// Passing this constants produces leaks...
procedure TCodeInsList.AddItemByValues(const a, b, c: AnsiString;...);
var
assembleditem : PCodeIns;
begin
new(assembleditem);
assembleditem^.Caption:=a;
assembleditem^.Line:=b;
assembleditem^.Desc:=c;
...
fList.Add(assembleditem);
end;
// ... even when calling this on WM_DESTROY!
destructor TCodeInsList.Destroy;
var
I: integer;
begin
for I := 0 to fList.Count - 1 do
Dispose(fList[I]);
fList.Free;
inherited Destroy;
end;
// produces leaks!?
hay un buen montón de preguntas de fugas cadena aquí, pero ninguno realmente aclarar qué patrones uno debe buscar. Google tampoco proporciona ninguno.
Edición: entonces, tengo que buscar las constantes pasadas. ¿Pero por qué?
¿Alguna idea, ehm?
No puedo cargar el proyecto de sourceforge en este momento. ¿Hay alguna posibilidad de que la forma principal no se destruya adecuadamente y, por lo tanto, deje cadenas colgando? ¿Eso lo haría? –
versión delphi?Si puede, pruebe con aqtime le dirá exactamente dónde está la fuga. –
@RichardA: Como puede ver en source \ devcpp.dpr, la splashform se libera usando 'Free'. Intentará agregar caFree al evento OnClose. @ Warren: Dudo mucho que aqtime pueda contarme más que FastMM4, gpProfiler y MemCheck. Y también necesito actualizar a XE para aqtime (usando D7 ahora). Mi universidad tiene una licencia D2009 flotando en algún lugar (no para gente de EE como yo), pero aqtime ni siquiera es compatible con eso. –
Orwell