Bonjour,
Je travail sur un projet en C dans lequel j'utilise de longues listes chainées...
Voici un exemple de liste :
Ensuite je l'instancie de la manière suivante :
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 struct data_POSS { int valide; int Tab1[50]; int Tab2[200]; }; struct node_POSS { struct data_POSS data; struct node_POSS *psuiv; struct node_POSS *pprec; }; struct liste_POSS { struct node_POSS *pTete; struct node_POSS *pQueue; int Nb_Elements; };
Dans mon Main.c j'appelle la fonction Create_liste afin de créer une chaine.
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 void add_POSS (struct liste_POSS *p_liste, struct data_POSS *p_data) { struct node_POSS *pNouveau = malloc (sizeof *pNouveau); if (pNouveau != NULL) { pNouveau->data = *p_data; pNouveau->psuiv = NULL; if (p_liste->pTete == NULL) { /* Premier maillon = Premiere Ligne */ p_liste->pTete = pNouveau; pNouveau->pprec = NULL; } else { p_liste->pQueue->psuiv = pNouveau; pNouveau->pprec = p_liste->pQueue; } p_liste->pQueue = pNouveau; } } void Create_liste (struct liste_POSS *p_POSS) { int i, j; struct data_POSS data_CP; p_POSS->Nb_Elements = 0; for (i=0;i<65534;i++) { data_CP.valide=1; for (j=0;j<50;j++) {data_CP.Tab1[j]=0;} for (j=0;j<200;j++) {data_CP.Tab2[j]=0;} add_POSS(p_POSS, &data_CP); p_POSS->Nb_Elements = p_POSS->Nb_Elements + 1; } }
Après, avoir travaillé sur cette chaine j'essaie de la réinitialiser en rappelant la fonction Create_liste...
Or, la fonction Create_liste ne donne pas a chaque fois le même nombre d'éléments dans la liste chainée... au début j'ai bien 35535, puis ensuite ca diminue...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 void Main () { int i; struct liste_POSS TOTO_liste = {NULL, NULL, 0}; for (i=0;i<5;i++) { Create_liste(&TOTO_liste); // UTILISATION et TRAITEMENT DE LA LISTE }
Mon programme est assez gros, et utilise beaucoup de liste et liste de liste...
Aussi, je me suis dit que c'etait peut etre un probleme mémoire et j'ai ajouté:
Est ce que la libération de mémoire est correcte?
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 void liberation_Mem (struct liste_POSS *C_POSS) { struct node_POSS *p_sw = C_POSS->pTete; struct node_POSS *p_tmp; while (p_sw!=NULL) { p_tmp = p_sw->psuiv; free(p_sw); C_POSS->pTete = p_tmp; p_sw = C_POSS->pTete; } } void Main () { int i; struct liste_POSS TOTO_liste = {NULL, NULL, 0}; for (i=0;i<5;i++) { Create_liste(&TOTO_liste); // UTILISATION et TRAITEMENT DE LA LISTE liberation_Mem (&TOTO_liste ); }
Merci pour votre aide,
Alex
Partager