Salut,
je sais pas ou se trouve le problème(le programme se plante lors de son execution)
En fait tu as plusieurs problèmes. Déjà, chez moi ça ne plante pas, mais cetet différence de comportement s'explique très bien. Pour citer les problèmes :
Code C/C++ :
Attention ! La fonction strcpy est dangereuse, tu risques ici à tout moment un dépassement en mémoire qui peux conduire, en fonction du cas, à un segfault, une corruption des données, une exécution de code arbitraire ou tout autre problème de ce genre. Afin de sécuriser ça, il te faut utiliser strncpy afin de contrôler le nombre de caractère copiés. Attention, avec strncpy il faut s'assurer soi même que l'on a bien un caractère nul à la fin de la chaîne.
Code C/C++ :
Les variables globales c'est très mauvais, là c'est un problème d'architecture du code.
Code C/C++ :
while((strcmp(p2->nom,nom)<0)&&(strcmp(nom,p3->nom)>0)){
Double problème ici :
- D'une part un problème au niveau de l'algorithme, ces tests comparatifs ne font pas le travail qui leur est demandé.
- Dans certains cas tu passes un pointeur nul à strcmp. Le comportement de strcmp en cas de passage d'un pointeur nul n'est pas défini, ce qui rend possible un segfault en fonction de l'implémentation de la bibliothèque standard (ceci est saans doute la cause de l'absence de plantage chez moi).
Afin de faire la comparaison entre tes deux éléments, tu devrais utiliser une focntion à part qui est capable de els comparer. Ainsi tu sépare les rôles et tu rend ton programme à la fois plus simple à comprendre et plus aisé à maintenir.
Code C/C++ :
Attention, tu n'as mis de valeur de retour que dans tes blocs conditionnels. Même s'il n'y a aps de raison pour ne pas arriver sur un return, certains compilateurs déclencheront une erreur.