Aula 24: Segurança de memória — vazamentos e dangling pointers
Aprendemos a pedir memória — agora aprendemos a não nos machucar com ela. Um vazamento de memória acontece quando você perde o último ponteiro para um bloco sem dar free nele, por exemplo atribuindo um novo endereço a p antes do free. Um double free é comportamento indefinido, e usar um ponteiro dep
Pense em chaves de depósito: um vazamento é perder a única chave de uma unidade cheia — a unidade fica ocupada para sempre. Um double free é tentar devolver a mesma chave duas vezes — a recepção surta. Um ponteiro dangling é usar uma cópia da chave de uma unidade que você já devolveu — quem sabe o que (ou quem) está lá agora.
- vazamento de memória
- Perder o último ponteiro para um bloco alocado sem chamar free — a memória fica ocupada sem nenhuma forma de liberá-la.
- double free
- Chamar free duas vezes no mesmo bloco. Comportamento indefinido — uma queda ou corrupção de memória.
- ponteiro dangling
- Um ponteiro que ainda guarda o endereço de um bloco liberado. Usá-lo (use-after-free) é comportamento indefinido.
- posse
- A mentalidade de defesa: todo bloco tem um 'dono' responsável por liberá-lo — exatamente uma vez. Sempre pergunte 'quem é responsável por liberar isso?'.
- valgrind
- Uma ferramenta que roda seu programa e detecta vazamentos e erros de memória: valgrind ./prog.