Ver Mensaje Individual
  #4  
Antiguo 03-02-2004
i.larranaga i.larranaga is offline
Miembro
 
Registrado: feb 2004
Posts: 26
Reputación: 0
i.larranaga Va por buen camino
problemas con la memoria

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.
Responder Con Cita