Bonjour,
J'ai une structure :
J'ai besoin de créer un groupe, pour cela j'utilise une fonction createGroup(...) qui renvoit un Group*. J'ai corrigé au fur et à mesure, parce que ça ne fonctionnait pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 typedef struct { char* name; Client* members[25]; int size; }Group;
Deuxième tentative : allocation dynamique visiblement foireuse, car si l'allocation fonctionne, j'obtiens un message d'erreur étrange lors dela liberation de la mémoire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // Première tentative : sans allocation dynamique // Problème ça segfault à l'allocation, et je ne comprends pas pourquoi... Group* newGroup = createGroup(...);
Enfin, troisième tentative avec un code trouvé sur le net et adapté, mais dont je ne comprends pas trop la logique :
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 Group* newGroup = malloc(sizeof(Group*)); newGroup = createGroup(...); free(newGroup); /* Le message d'erreur : *** glibc detected *** ./server: free(): invalid next size (fast): 0x0000000002386030 *** ======= Backtrace: ========= /lib/libc.so.6(+0x77326)[0x7fb67e796326] ./server[0x4019cc] ./server[0x401772] ./server[0x4011ce] ./server[0x40187a] /lib/libc.so.6(__libc_start_main+0xed)[0x7fb67e74038d] ./server[0x400b09] ======= Memory map: ======== [... du blabla ... ] */Mes questions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Group* newGroup = (Group*)malloc(sizeof(Group)); newGroup = createGroup; free(newGroup);
Pourquoi les deux premières methodes ne fonctionnent-elles pas ?
Qu'est-ce que cette étrange manière de faire une allocation dans la troisième méthode (le cast et tout ?)
Merci
Partager