Bonjour,
J'ai un petit problème avec ma fonction ajouter concernant ma liste chaînée.
Je suis certains à 100% que c'est cette fonction qui pose problème.
La suite de mon code marche très bien.
J'ai tenté de voir ce qui en ressort avec Sysalloc mais rien à signaler.
J'ai par contre créer une fonction détruire() qui libère l'espace mémoire de ma liste et là j'obtiens une erreur. (c'est un simple free de toute la liste )
J'en déduis donc que ma liste est probablement corrompue!
Voilà le code.
Le message d'erreur proprement dit :
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 typedef int coord [8]; typedef struct cell cell; struct cell{ int coordonees [8]; cell *suiv; }; /* Fonction qui pose problème */ cell *ajouter(cell *pc, int *table) { int i=0; if (pc == NULL) { cell *der = malloc(2*sizeof(cell)); for(i=0; i<8; i++) der->coordonees[i] = table[i]; //Je soupçonne cette ligne d'en être à l'origine der->suiv = NULL; return der; } pc->suiv = ajouter(pc->suiv, table); return pc; } int main () { coord init; cell *pc = NULL; pc=ajouter(pc, init); afficher(pc); // sys_mem_trace(); detruire(pc); // Produit un message d'erreur return 0; }
Je vous remercie!
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 5 11 9 8 18 13 8 4 // Résultat de la fonction afficher() *** glibc detected *** test: free(): invalid next size (fast): 0x00000000006061d0 *** ======= Backtrace: ========= /lib/libc.so.6(+0x71e16)[0x7ffff786ce16] /lib/libc.so.6(cfree+0x6c)[0x7ffff7871b8c] /test[0x401774] /test[0x401794] /test[0x40202d] /lib/libc.so.6(__libc_start_main+0xfd)[0x7ffff7819c8d] /test[0x400b69] ======= Memory map: ======== 00400000-00406000 r-xp 00000000 08:09 2229919 00605000-00606000 rw-p 00005000 08:09 2229919 00606000-00627000 rw-p 00000000 00:00 0 [heap] 7ffff0000000-7ffff0021000 rw-p 00000000 00:00 0 7ffff0021000-7ffff4000000 ---p 00000000 00:00 0 7ffff75e5000-7ffff75fb000 r-xp 00000000 08:03 1305603 /lib/libgcc_s.so.1 7ffff75fb000-7ffff77fa000 ---p 00016000 08:03 1305603 /lib/libgcc_s.so.1 7ffff77fa000-7ffff77fb000 rw-p 00015000 08:03 1305603 /lib/libgcc_s.so.1 7ffff77fb000-7ffff7954000 r-xp 00000000 08:03 1309157 /lib/libc-2.11.3.so 7ffff7954000-7ffff7b53000 ---p 00159000 08:03 1309157 /lib/libc-2.11.3.so 7ffff7b53000-7ffff7b57000 r--p 00158000 08:03 1309157 /lib/libc-2.11.3.so 7ffff7b57000-7ffff7b58000 rw-p 0015c000 08:03 1309157 /lib/libc-2.11.3.so 7ffff7b58000-7ffff7b5d000 rw-p 00000000 00:00 0 7ffff7b5d000-7ffff7bdd000 r-xp 00000000 08:03 1309170 /lib/libm-2.11.3.so 7ffff7bdd000-7ffff7ddd000 ---p 00080000 08:03 1309170 /lib/libm-2.11.3.so 7ffff7ddd000-7ffff7dde000 r--p 00080000 08:03 1309170 /lib/libm-2.11.3.so 7ffff7dde000-7ffff7ddf000 rw-p 00081000 08:03 1309170 /lib/libm-2.11.3.so 7ffff7ddf000-7ffff7dfd000 r-xp 00000000 08:03 1309153 /lib/ld-2.11.3.so 7ffff7fe0000-7ffff7fe3000 rw-p 00000000 00:00 0 7ffff7ff8000-7ffff7ffb000 rw-p 00000000 00:00 0 7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0 [vdso] 7ffff7ffc000-7ffff7ffd000 r--p 0001d000 08:03 1309153 /lib/ld-2.11.3.so 7ffff7ffd000-7ffff7ffe000 rw-p 0001e000 08:03 1309153 /lib/ld-2.11.3.so 7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0 7ffffffea000-7ffffffff000 rw-p 00000000 00:00 0 [stack] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Program received signal SIGABRT, Aborted. 0x00007ffff782d1b5 in raise () from /lib/libc.so.6
Partager