Diferenças entre edições de "Vazamento de memória"

94 bytes removidos ,  12h35min de 23 de dezembro de 2006
sem resumo de edição
Considere o codigo abaixo:
 
 
<nowiki>== main(){
char *p1;
char *p2;
free(p1);
free(p2);
} ==
}</nowiki>
 
 
No exemplo são declarados 2 ponteiros para um tipo char, logo em seguida é alocado 1024 bytes para cada ponteiro e é feito um teste para ver se em algum momento a alocacão dinamica de memória falhou. Caso a alocacão tenha falhado para algum dos ponteiros o programa é abortado. Poderia ter acorrido uma falha de alocacão se não houvesse memória suficiente disponivel. Logo abaixo do 'if' a memoria alocada é liberada.
Vejamos agora uma versão que trata essa falha:
 
<nowiki>main(){
char *p1;
char *p2;
free(p1);
free(p2);
}
}</nowiki>
 
No programa acima, caso alguma instrucão 'malloc' tenha falhado, a instrucão 'free' á executada e somente depois disso o 'return'. Caso o valor dos ponteiros seja NULL, a instrucão 'free' não fará nada.
Imagine esse tipo de acontecimento dentro de um loop, muita memória seria desperdicada, e em pouco tempo
consumiria toda a memória disponivel do sistema.
<nowiki><nowiki>Inserir texto não-formatado aqui</nowiki></nowiki>
Utilizador anónimo