Allocation dynamique d'une structure
Bonjour,
J'ai une structure :
Code:
1 2 3 4 5 6
| typedef struct
{
char* name;
Client* members[25];
int size;
}Group; |
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:
1 2 3
| // Première tentative : sans allocation dynamique
// Problème ça segfault à l'allocation, et je ne comprends pas pourquoi...
Group* newGroup = createGroup(...); |
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:
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 ... ]
*/ |
Enfin, troisième tentative avec un code trouvé sur le net et adapté, mais dont je ne comprends pas trop la logique :
Code:
1 2 3
| Group* newGroup = (Group*)malloc(sizeof(Group));
newGroup = createGroup;
free(newGroup); |
Mes questions :
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 :)