Bonjour,
Je suis sur mac et je compile dans l'invit de commande avec le compilateur de Xcode.
J'ai abordé les pointeurs récemment et j'ai rencontré des problèmes étranges.
J'ai créé une fonction simple pour vous illustrer le problème; quand j'alloue dans une fonction un pointeur, celui-ci n'a pas la même adresse quand je sors dans ma fonction.
Et voici le résultat compilé ainsi que le message d'erreur sur le 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 #include <stdio.h> #include <stdlib.h> int test(int* pntr) { pntr = malloc(sizeof(int)); *pntr = 34; printf("\n%p\n%d", pntr, *pntr); return 0; } int main() { int* pntr; test(pntr); printf("\n%p\n%d", pntr, *pntr); free(pntr); }
0x7f8be2c04be0
34
0x7fff62a93036
az.sh(771,0x7fff7f62d300) malloc: *** error for object 0x7fff62a93036: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
-125990072Abort trap: 6
J'obtiens deux adresses mémoires différentes…
J'ai soumis le problème à mon prof de C qui n'a pas trouvé et a un moment pensé qu'il y avait un garbage collector mais dans un compilateur de C c'est absurde.. Je suis perdu et sans solutions.
Merci de votre aide,
Cordialement.







Répondre avec citation
Quoique... Quand on utilise le free en cours d'exécution, c'est pour laisser la place aux autres données du programme. Si à chaque fois, on alloue un espace mémoire sans de désalloué, au bout d'un moment il n'y aura plus de place et le programme se plantera. Mais; quand on coupe le programme, il me semble que dans mes souvenirs il y a quelque chose qui passe derrière pour désalloué tout ce qui doit l'être. Mais je n'en suis pas sur et il faut que je vérifie sur le coup. )






Partager