technique pour remettre tous les pointeurs à NULL
Bonjour, voici le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
int * p = malloc(3*sizeof(*p));
if(p==NULL)
{
fprintf(stderr,"erreur\n");
exit(1);
}
int * q=p;
free(q); q=NULL;
//free(p); p=NULL;
printf("c'est fini\n");
return 0;
} |
Si j'enlève la ligne qui est en commentaire, alors mon code tourne jusqu'au bout bien que l'erreur suivante s'affiche sur mon terminal
Citation:
out(287) malloc: *** error for object 0x5000f0: double free
out(287) malloc: *** set a breakpoint in szone_error to debug
c'est fini
Je comprends tout à fait que la prgm plante car je libère une zone mémoire déjà libérée. Mais pourquoi le prgm s'exécute jusqu'au bout bien qu'il y ait une erreur pendant son exécution ?
Y a-t-il une technique pour remettre le pointeur p à NULL : plus généralement, y a-t-il une manière de structurer les données de telle manière que si je libère une zone de la mémoire, alors tous les pointeurs pointant sur celle-ci se mettent à NULL automatiquement ? Ou dois-je tout faire "à la main" ?
Merci.