Hola a todos,
yo tengo un problema parecido al comentado, mi programa va cogiendo y cogiendo RAM según se está ejecutando. He estado mirándolo un poco y resulta que por algún lado no libero memoria. Os pongo un ejemplo de una función del programa, el cual tiene el dicho problema:
function TForm.Funcion(const BMP: TBitmap): TBitmap;
var
x,y: Word;
Line1,Line2: PByteArray;
begin
//Crear y asignar BMP
Result:=TBitmap.Create;
Result.Assign(BMP);
//Recorre la imagen línea a línea
for y:=0 to Result.Height-1 do
begin
//Asigna los valores a los punteros
Line1:=BMP.ScanLine[y]; //*
Line2:=Result.ScanLine[y]; //*
//Recorre pixel a pixel
for x:=0 to Result.Width-1 do
begin
//Realiza operaciones
end;
end;
end;
La cuestión es que no sé porqué cuando hace * parece que se hace una copia de la imagen en memoria, y luego al acabar la función esta memoria no se libera y se va acumulando en sucesivas llamadas a la función.
He probado a hacer una copia de la variable de entrada y luego liberarlo con .Free, y así si he conseguido liberar la parte correspondiente de memoria, pero no consigo liberar la correspondiente a Result o a la salida.
¿Cómo podría conseguirlo? ¿Y porqúe si en * asigno punteros se crea una copia de la imagen y ocupa memoria?
Muchas gracias a todos por vuestra ayuda y un saludo.