ReportMemoryLeaksOnShutdown: Memory Leak em Delphi

28/09/2009

0

Estou usando Delphi 2007 e o meu Dpr esta assim:

program Project1;

uses
  Forms,
   SysUtils,
  Unit1 in ´Unit1.pas´ ;

{$R *.res}

begin
  ReportMemoryLeaksOnShutdown := True;
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
  datetostr(date);
end.


Da Memory Leak ??????? ReportMemoryLeaksOnShutdown

PQ ???

obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim
Marco Salles

Marco Salles

Responder

Posts

28/09/2009

Afarias

Qual a mensagem (relatório) do memory leak?


T+


Responder

28/09/2009

Marco Salles

13-20 Bytes:String x1



Responder

28/09/2009

Joaoshi

Esta linha é o problema:

datetostr(date); 



Responder

28/09/2009

Osocram

Marco Salles.
Da a impressão que essa linha
datetostr(date); 

acabou alocando o resultado em memoria em algum lugar, mais provavel que foi no ´limbo´.
E como antes de fechar o projeto tinha algo em memoria ele deu memory leak


Responder

28/09/2009

Marco Salles

Tá , mas mesmo trocando de lugar , continua a mesma mesnagem

uses 
  Forms, 
   SysUtils, 
  Unit1 in ´Unit1.pas´ ; 

{$R *.res} 

begin 
  ReportMemoryLeaksOnShutdown := True; 
  datetostr(date);  /////////////Colocando aqui oooo
  Application.Initialize; 
  Application.MainFormOnTaskbar := True; 
  Application.CreateForm(TForm1, Form1); 
  Application.Run;  
end.



Responder

28/09/2009

Afarias

|datetostr(date);

o q exatamente esta linha de comando faz?? não parece fazer sentido algum



T+


Responder

28/09/2009

Marco Salles

datetostr(date); o q exatamente esta linha de comando faz?? não parece fazer sentido algum


Nenhum sentido ...

para quem quiser simular o erro , fica mais fácil

claro que meu dpr original é bem mais complexo . Mas fui depurando e no
gargalho cheguei a esta Instrução ... Então para facilitar a comunicação so
coloquei a instrução que esta dando Memory Leak para que outros atestem
e deem a opinião , simulando a experiencia em suas resptivas máquinas


Responder

28/09/2009

Afarias

Se vc atribuir o valor da função a uma variável STRING (AnsiString) ainda assim recebe a mensagem de memory leak ?

VariavelString := DateToStr(Date);


??


T+


Responder

28/09/2009

Marco Salles

com AnsiString e com String Somente . com Showmessage e sem
Showmessage .

program Project1;

uses
  Forms,
   SysUtils,
   dialogs,
   Unit1 in ´Unit1.pas´ ;

{$R *.res}

var
mens:String;

begin
 ReportMemoryLeaksOnShutdown := True;
 mens:=Datetostr(date);
 Showmessage(mens);
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


Algume ja simulou este codigo no Delphi2007 ???


Responder

28/09/2009

Afarias

Pelo fato de ´long strings´ terem a memória dinamicamente alocada e de-alocada no Delphi (via sistema de reference-counting) somado a forma como o Delphi trata as variáveis globais (digamos q... ´soma 1 ao número de referências´) este ´estranho memory leak´ pode ser reportado.

Isto teoricamente ocorre apenas para strings como variáveis globais atribuídas por funções (que retornam string). Exatamente o seu caso.

Entretanto isto não é um memory leak real. Com o encerramento do processo a memória será devolvida ao SO como parte do sistema de ´finalização´ do Delphi voltado para variáveis globais -- apenas que o gerenciador de memória (FastMM) não toma conhecimento, e assim reporta como memory leak


T+


Responder

28/09/2009

Afarias

+1 coisa... não sei se pq a partir do D2006 quando o FastMM foi incluído no Delphi deixou de ser necessário mas a unidade do FastMM fosse incluida explicitamente na uses do DPR.

Ela deve ser sempre a primeira da uses no DPR ou diversos memory leaks falsos são reportados.

Imagino q no D2007 a IDE/compilador inclua automaticamente mas, se não tiver certeza, coloque explicitamente.

Tb verifique se o seu Delphi/FastMM está atualizado.



T+


Responder

30/09/2019

Vinicius Silva

Estou usando Delphi 2007 e o meu Dpr esta assim:

program Project1;

[code:1:fe11bf0dd5]uses
Forms,
SysUtils,
Unit1 in ´Unit1.pas´ ;

{$R *.res}

begin
ReportMemoryLeaksOnShutdown := True;
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
datetostr(date);
end.[/code:1:fe11bf0dd5]

Da Memory Leak ??????? ReportMemoryLeaksOnShutdown

PQ ???

obs: Não tem nada no Form ... O Projeto esta Vazio , digamos assim


Como fazer gravar o log com os memory leaks encontrados? Por que ativando o ReportMemory ele so exibe um dialog quando fecha a aplicação.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar