Malloc : anomalie d'assignation de pointeur
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.
Code:
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);
} |
Et voici le résultat compilé ainsi que le message d'erreur sur le terminal:
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.