free

free

por Karina Silva -
Número de respostas: 1
Oi, como posso ter certeza que uma estrutura ou qualquer coisa foi desalocada? Digo isso, pq naum sei c bastaria dar um free(estrutura) para liberar a memória ou se é preciso mudar todas as referências para estrutura (atualizar o prox e o ant q apontam para ele). E mesmo depois de eu ter feito um free, o endereço apontado pela estrutura vai para NULL, né?
Em resposta à Karina Silva

Re: free

por João Francisco Amorim Enomoto -
Essa questão do free é bem importante e pelo pouco que vi algumas pessoas ficaram meio perdidas com o EP3 com essa questão. Mas vamos as suas perguntas:

- desalocar é o princípio lógico reverso da estrutura de dados que você fez. Ex: se você criou uma lista ligada, você precisa liberar cada elemento. Liberar apenas a cabeça vai fazer você perder o apontador para o início da lista, mas alguns dos seus elementos ainda vão existir e vão "flutuar" na memória. Saber se você desalocou ou não depende de você enxergar se o seu algoritmo está fazendo isso ou não.
- não, um apontador é rigorosamente um endereço de memória. Se você der um free em um apontador, você na verdade está liberando a memória que foi alocada nessa posição, não o endereço em si. Portanto, muito cuidado: você liberou o que foi alocado, mas o endereço ainda estará disponível para outras estruturas, caso você não tenha alterado isso. Inclusive, se você tentar verificar um campo de um apontador que foi liberado, você provavelmente achará lixo de memória, algo totalmente sem sentido. Isso se dá por conta justamente daquilo que ocorreu: você não mudou o endereço, mas o alocado sim.

Vou deixar depois um link para um programa bem simples que faz isso: aloca, imprime, desaloca, imprime. Vocês mesmos podem fazer esses testes se quiserem.

Abraços!