Bonjour,

J'ai une structure :
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;
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
// 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 : 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 ... ]
*/
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
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