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 : 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
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; }





Répondre avec citation








mais qu'est-ce qu'y faut pas entendre !!! Et les machines qui bloquent, qu'il faut rebooter car plus rien ne marche, ou ton disque dur tourne en permanence, parce que le swap est plein (quand c'est pas les anciennes versions qui te poppaient "Fatal error 0x07773 ...)
vi mais ça c'est pour les pas bons programmeurs
+ 

Partager