Fórum Vazamento de memória: o que é isso? #372205
13/07/2009
0
Já li em alguns lugares que certo código tinha um problema de ´vazamento de memória´ :shock: . O que é isso :?:
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
Willian
Curtir tópico
+ 0
Responder
Posts
13/07/2009
Osocram
Então amigo... Essa é uma parte que poucos programadores se preocupam, infelizmente.
E é um dos principais motivos dos milagrosos ´Access violation´ que aparecem do nada.
Mas é o seguinte respondendo a sua pergunta:
- Se vc criar um componente em Run-time e não destruir ele, ele vai ficar na memoria p sempre enqto seu sistema esta aberto. Agora para piorar um pouco mais, imagina que vc cria um compenente no on create do form e não destroi o componente, agora imagina que vc abre este form varias vezes. então vai ficar com varios lixos na memoria.
por isso é recomendavel sempre que cria um objeto usar Try finally
ex.
objeto := TObject.Create;
try
faz as coisas
finally
FreeAndNil(objeto)
end;
e perceba que o TObject.Create esta fora do Try... Muitos erram em deixar ele dentro do bloco Try, e tem que ficar fora mesmo.. pois se der um erro ao criar ele nao deve ir para o finally pois vai dar erro qdo tentar liberar um objeto e ele não estiver criado.
Espero ter explicado em vez de complicado.
Flw.
E é um dos principais motivos dos milagrosos ´Access violation´ que aparecem do nada.
Mas é o seguinte respondendo a sua pergunta:
- Se vc criar um componente em Run-time e não destruir ele, ele vai ficar na memoria p sempre enqto seu sistema esta aberto. Agora para piorar um pouco mais, imagina que vc cria um compenente no on create do form e não destroi o componente, agora imagina que vc abre este form varias vezes. então vai ficar com varios lixos na memoria.
por isso é recomendavel sempre que cria um objeto usar Try finally
ex.
objeto := TObject.Create;
try
faz as coisas
finally
FreeAndNil(objeto)
end;
e perceba que o TObject.Create esta fora do Try... Muitos erram em deixar ele dentro do bloco Try, e tem que ficar fora mesmo.. pois se der um erro ao criar ele nao deve ir para o finally pois vai dar erro qdo tentar liberar um objeto e ele não estiver criado.
Espero ter explicado em vez de complicado.
Flw.
Já li em alguns lugares que certo código tinha um problema de ´vazamento de memória´ :shock: . O que é isso :?:
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
Responder
Gostei + 0
13/07/2009
Willian
Respondeu sim, muito obrigado.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)