[Lazarus-es] Error al cerrar mi aplicacion

Juan M Puertas juatman_2000 en yahoo.es
Vie Dic 24 13:15:41 CET 2010


 Hola. 
 No he conseguido aún encontrar el, en mi caso, "objeto loco" , sigue dando 
error con "FreeAndNil(Objeto)".
 Quisiera aprovechar para felicitar a toda la gente de esta lista la Navidad y 
el 2011.
 Gracias en especial a José. :-)





________________________________
De: José Mejuto <joshyfun en gmail.com>
Para: Spanish version of Lazarus List <lazarus-es en lists.lazarus.freepascal.org>
Enviado: vie,10 diciembre, 2010 00:43
Asunto: Re: [Lazarus-es] Error al cerrar mi aplicacion

Hello Juan,

Thursday, December 9, 2010, 9:29:59 PM, you wrote:

JMP>  Hola. 
JMP>  Curiosamente se ha solucionado al desactivar la opción "heaptrc" del menú
JMP> "Enlazado".
JMP>  Sería interesante saber si a vosotros os da el mismo error si activáis 
esta
JMP> opción. Supongo que no, que se debe a que tengo que liberar unos cuantos 
bytes
JMP> de la pila, y por ser un novato con el freepascal no sé cómo hacerlo.
JMP>  Muchas gracias José :-)

Si desactivas la opción y ya no da el error, entonces es seguro que
tienes un puntero loco. El heaptrc una de las cosas que hace es que
cuando liberas un bloque de memoria este asigna un valor de marcado,
de modo que si intentas usar el bloque después de liberarlo dará un
error con seguridad, cosa en en otro caso es  incierta.

Imagina este programa:

----------------------------------------------------
program pruebamemoria;

uses classes;

var
  p: pchar;
begin
  getmem(p,256); //reservamos 256 bytes de memoria
  Fillchar(p,64,'A');
  p[64]:=#0;
  writeln(p);
  freemem(p);
  inc(p,8);
  writeln(p);
  readln();
end.
-----------------------------------------------------

Ejecuta ese programa con y sin heaptrc y verás el problema, y como el
puntero loco es "p" ya que se usa después de liberarlo.

Una buena técnica es que en vez de "Objeto.free" uses
"FreeAndNil(Objeto)" y en los punteros en vez de "freemem(x)" uses
"freemem(x);x:=nil;"

-- 
Best regards,
José


_______________________________________________
Lazarus-es mailing list
Lazarus-es en lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es



      




More information about the Lazarus-es mailing list