Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
Cool

Cita:
Empezado por i.larranaga
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.
Pues no "parece que se hace una copia"... mas bien seguro que se hace una copia en:

Código:
  Result:=TBitmap.Create;
  Result.Assign(BMP);
Si queres que esa memoria se libere, la llamada de la función debiera ser algo como:

Código:
Var
  MyBMP : TBMP;
Begin
  MyBMP := Funcion(OtroBMP);
  try
    // hacer cosas;
  finally
    MyBMP.Free;
  end;
end
o bien:

Código:
Begin
  with Funcion(OtroBMP) do 
    try
      // hacer cosas;
    finally
      Free;
    end;
end;
ya que el objeto se crea dentro de la rutina, y no parece que liberes el recurso fuera, según tu explicación.

El hacer una copia de la variable de entrada y luego liberarla... no tiene sentido.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #2  
Antiguo 03-02-2004
i.larranaga i.larranaga is offline
Miembro
 
Registrado: feb 2004
Posts: 26
Poder: 0
i.larranaga Va por buen camino
gestionando bien la memoria

Hola otra vez,

ya he probado lo que decías, y ahora la memoria que se reservaba para el Result ya la libero desde la función que llama a la que he expuesto. No obstante, te volveré a explicar mejor el problema. Cuando se llama a la función, como tú decías se copia la imagen con assign, pero todavía no aumenta la memoria en uso. Cuando hago line1:=... es cuando aumenta la memoria en uso, y también cuando hago line2:=... Como ésta última la libero después desde la función desde la que he llamado a ésta, quedaría resuelto, pero el line1:=... que se refiere a la variable de entrada (constante, no sé si esto influirá) es el que me da problemas ahora. Con esta asignación del linescan se reserva memoria, pero no se cómo liberarla luego, ya que no puedo hacer un Free de la variable de entrada, pues ésta se pierde.
¿Qué es lo que podría hacer con este problema?
Muchas gracias por tu ayuda y un saludo.
Responder Con Cita
  #3  
Antiguo 03-02-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 30
jachguate Va por buen camino
La verdad nunca he usado el método ScanLine, y la documentación no es clara en cuanto a si reserva memoria o no. Dado que devuelve un puntero, te recomiendo que revises el código y/o documentación del API, y si reserva memoria, llamés al método adecuado para liberarla después de haber terminado de usarla.

Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 03-02-2004
i.larranaga i.larranaga is offline
Miembro
 
Registrado: feb 2004
Posts: 26
Poder: 0
i.larranaga Va por buen camino
Memoria ocupada por Bitmaps

Hola otra vez,
al final he tenido que hacer una copia a una variable local del parametro de entrada para asociarlo con el puntero, y luego una vez acabada la función he hecho un Free a esta variable. con esto he conseguido liberar la memoria. Se que no es lo óptimo pero funciona. Si encuentras la razón de mis problemas hazmelo saber, por favor. Muchas gracias por tu ayuda y un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:57:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi