EnzoFerber
(usa FreeBSD)
Enviado em 27/06/2011 - 11:04h
Depois de free(p), o endereço apontado por 'p' poderá ser alocado novamente e usado para armazenar outro valor.
Por exemplo:
E | C
1 |
2 |
3 |
4 |
Sendo 'E' endereço e 'C' conteúdo.
Você aloca memória para um ponteiro, assim:
ponteiro = malloc(1)
*ponteiro = VIVA O LINUX
E | C
1 |
2 | VIVA O LINUX
3 |
4 |
Agora o endereço de 'ponteiro' é 2 (esse endereço você nao escolhe, é dado por malloc())
E o conteúdo do endereço 2 é VIVA O LINUX.
Neste momento, o computador não pode alocar essa memória denovo, elá é reservada por malloc().
Se você fizer free(ponteiro), a memoria vai ficar assim:
E | C
1 |
2 | VIVA O LINUX
3 |
4 |
Não muda, o endereço para qual 'ponteiro' aponta continua sendo 2 e o conteúdo continua sendo o mesmo. Mas agora malloc() poderá usar esse endereço denovo, para outra alocação.
Para você apagar o valor, você pode colocar um 0x0 no primeiro byte do ponteiro, assim:
*ponteiro = 0x0;
Ou simplesmente apagar o endereço para o qual ele aponta:
ponteiro = 0x0;
Espero ter ajudado,
Qualquer coisa posta denovo,
Enzo Ferber
[]'s