1 2 3 4 5
| Group create_group(char name[], char* memb[], int size)
{
Group group;
....
group.name = name; |
Il est à peu près sûr que ce genre de code va poser problème à un moment donné :
group.name = name; Copie l'adresse name du début du tableau contenant la chaine de caractères mais pas la chaine de caractères elle-même. Si ce tableau vient à être réutilisé pour stocker une autre chaine, alors c'est cette autre chaine dont on aura l'adresse et tous les group.name pointeront vers cette nouvelle chaine. Si ce tableau vient à être détruit, alors cette adresse deviendra invalide et l'accès à un group.name fera planter.
group.members[i] = search_client(memb[i]);
On ne connait pas la fonction search_client(), mais d'après son nom, on peut supposer qu'elle renvoie un pointeur vers le Client (type qui n'est pas déclaré dans le segment de code proposé) identifié par memb[i]. On peut supposer alors qu'elle renvoie NULL si le Client n'est pas trouvé. Dans ce dernier cas printf("%s\n" , (group.members[i])->name); va planter.
Est-ce que ça pourrait être dû au fait que le champs "name" que j'affiche pourrait contenir une chaine de caractere qui ne se termine pas par \0 ?
%s impose que la chaine soit correctement terminée par '\0'. La première chose à faire est de s'assurer qu'on construit des chaines correctes.
Quelques tests plus tard j'ai l'impression que
Soit mon programme est sacrément buggé
Soit le problème vient d'ailleurs (terminal ?)
Le problème vient d'ailleurs (pas du terminal) ET est sacrément buggé
Partager