Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2011
sirmenon sirmenon is offline
Registrado
 
Registrado: abr 2010
Posts: 9
Poder: 0
sirmenon Va por buen camino
memory leak em classe

Olá amigos,
Estou com um problema de memory laeak e não estou conseguindo identifica-lo.
Segue o meu código:

Eu tenho a seguinte classe:
Código Delphi [-]
type 
  TFormParam = class 
  private 
    FCampos: string; 
    procedure SetCampos(const Value: string); 
  public 
    VinculaCampos : TStringList; 
    property Campos: string read FCampos write SetCampos; 
  Constructor Create; 
    destructor Destroy; 
  end; 
  
   ... 
  
constructor TFormParam.Create; 
begin 
  VinculaCampos := TStringList.Create;   
end; 
  
destructor TFormParam.Destroy; 
begin 
  VinculaCampos.Free; 
  inherited; 
end; 
  
procedure TFormParam.SetCampos(const Value: string); 
begin 
  FCampos := Value; 
  VinculaCampos.CommaText := Value; 
end;

Estou utilizando ela para passar informações de um Form para o outro, como no exemplo:

No Form1 eu chamo assim:
Código Delphi [-]
  
   objParam := TFormParam.Create; 
   try 
     objParam.Campos := 'Neil=45, Brian=63, Jim=22'; 
   if Form2 = nil then 
       Form2 := TForm2.Create(Self,objParam); 
     Form2.ShowModal; 
   finally 
     objParam.Free; 
   end;

No Form2 eu utilizo assim:
Código Delphi [-]
constructor TForm2.Create(Owner: TComponent; FrmParametro: TFormParam); 
var 
  i : Integer; 
begin 
  inherited Create(Owner); 
  for I := 0 to FrmParametro.VinculaCampos.Count - 1 do 
  begin 
    lstBox1.Items.Add(FrmParametro.VinculaCampos.Names[i]) ; 
    lstBox2.Items.Add(FrmParametro.VinculaCampos.ValueFromIndex[i]); 
  end; 
end;


Alguém saberia me dizer aonde esta o memory leak?

Última edición por ecfisa fecha: 05-05-2011 a las 20:58:59. Razón: Etiquetas [DELPHI] [/DELPHI]
Responder Con Cita
  #2  
Antiguo 05-05-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y cómo sabes que tienes un memory leak?, ¿cómo lo verificas?.

Responder Con Cita
  #3  
Antiguo 05-05-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Otra pregunta, esta línea:
Código Delphi [-]
 
  Form2 := TForm2.Create(Self,objParam);

¿ Te la compila ?

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 06-05-2011
sirmenon sirmenon is offline
Registrado
 
Registrado: abr 2010
Posts: 9
Poder: 0
sirmenon Va por buen camino
Resposta 1:
Eu estou usando o EurecaLog, ele aponta um memory leak na criação de TStringList.

Resposta 2:
Sim, esta compilando normalmente.
Responder Con Cita
  #5  
Antiguo 06-05-2011
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Código Delphi [-]
constructor TFormParam.Create; 
begin 
  VinculaCampos := TStringList.Create;
   
end;
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #6  
Antiguo 06-05-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Probablemente hagan falta estas linea...

Código Delphi [-]
destructor Destroy;

Cambiar por:
Código Delphi [-]
destructor Destroy; Override


Código Delphi [-]
constructor TFormParam.Create; 
begin 
 VinculaCampos := TStringList.Create;   
end;

Cambiar por:

Código Delphi [-]
constructor TFormParam.Create; 
begin 
   inherited create;
  VinculaCampos := TStringList.Create;   
end;

¿Has hecho un seguimiento (Debug) paso a paso (F7) para saber la linea que te genera el error?

Saludos,

Última edición por gatosoft fecha: 06-05-2011 a las 16:34:53. Razón: las palabras reservadas no mostraban formato
Responder Con Cita
  #7  
Antiguo 06-05-2011
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
Post

una clase deberia tener las minimas interacciones con otras clases, esto es por una cuestion de orden, por eso yo normalmente utilizo formularios modales y funciones de clase y paso los parametros durante la creacion, ahi te envio un ejemplo para que lo modifiques al gusto

Código Delphi [-]
class function TfrmEditField.EditField(var AName, AType, ALong,
  ADisplay: string): boolean;
var
  AfrmEditfield: TfrmeditField;
begin
  try
    AfrmEditField := TfrmEditField.create(Application);
    AfrmEditField.lbNameField.Caption:= Aname;
    AfrmEditField.ComboTipo.text := AType;
    AfrmEditfield.DBLong.Text:= ALong;
    AfrmEditfield.DBDisplay.Text:= ADisplay;
    result := false;
    if AfrmEditField.ShowModal = mrOk then begin
      AType := AfrmEditField.combotipo.text;
      ALong := AfrmeditField.dblong.Text;
      Adisplay:= Afrmeditfield.DBDisplay.Text;
      result := true;
    end;
  finally
    AfrmEditField.free;
  end;

salu2
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #8  
Antiguo 07-05-2011
sirmenon sirmenon is offline
Registrado
 
Registrado: abr 2010
Posts: 9
Poder: 0
sirmenon Va por buen camino
Olá amigos,
Colocando o override resolveu.
Obrigado pelas dicas.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Out of memory Firewind Lazarus, FreePascal, Kylix, etc. 3 20-07-2010 12:33:32
Out of memory blaiselaborde Varios 10 26-01-2010 18:52:27
Cómo saber si una classe deriva de otra classe abstracta? poyo OOP 6 31-01-2009 00:09:22
Sobre las perdidas de memoria (memory leak) sitrico OOP 2 05-04-2007 19:30:54
Duda! donde crear una Classe¿? kye_z OOP 4 27-10-2004 16:14:59


La franja horaria es GMT +2. Ahora son las 09:06:20.


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