Bonjour, voici le code suivant :
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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 ?out(287) malloc: *** error for object 0x5000f0: double free
out(287) malloc: *** set a breakpoint in szone_error to debug
c'est fini
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.
Partager