besoin de comprehension sur free() et pointeur
Bonjour,
Je développe depuis peu en C et je commence tout juste à assimiler les concepts de pointeurs et gestion mémoire. Jusqu'à maintenant je n'ai pas vraiment eu de problemes avec la gestion dynamique de la mémoire. Mais là si. Je n'arrive pas à libérer de la mémoire suite à une structure de données un peu spéciale et qui doit sans doute être fausse. J'aimerai bien une petite explication clair du bug.
Voici le code. A la fin il y a 2 tests de print et j'obtiens une valeur pour test.toto[33].toto1 alors que je pensais avoir libéré la mémoire. Merci de votre aide:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct TOTO
{
int toto1;
};
struct TEST
{
int test1;
float test2;
float test3[2];
struct TOTO *toto;
};
struct TEST test;
if((test.toto = (struct TOTO*)malloc(50*sizeof(struct TOTO))) == NULL)
{
printf("erreur");
}
test.test1 = 1234;
int i;
for(i=0;i<50;i++)
{
test.toto[i].toto1 = i;
}
printf("%d\n",test.test1);
printf("%d\n",test.toto[33].toto1);
//je libere la memoire de *toto, enfin je croyais
free(test.toto);
printf("%d\n",test.toto[33].toto1);
return EXIT_SUCCESS;
} |