begin process at 2012 05 29 04:54:44
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

fonction inserer dans une liste ordonnées+liste chainée


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

fonction inserer dans une liste ordonnées+liste chainée

samedi 19 février 2011 à 17:52:24 | fonction inserer dans une liste ordonnées+liste chainée

curieuse9informatique

SVP est ce que vous pouvez m'aider:
je doit faire une fonction ajouterlisteordonnée qui permet d'ajouter un element dans une liste chainée ordonnée mais je sais pas ou se trouve le problème(le programme se plante lors de son execution)
/*
*
*inserer dans une liste ordonnée
*
*/
int insertionListeOrd(char *nom,int val){
Personne *p=(Personne *)malloc(sizeof(Personne));
if(p==NULL) return 0;
else{
strcpy(p->nom,nom);
p->val=val;
if(premier==NULL){
p->svt=NULL;
premier=p;
return 1;
}
else{
Personne *p2=premier;
Personne *p3=premier->svt;
while((strcmp(p2->nom,nom)<0)&&(strcmp(nom,p3->nom)>0)){
p2=p2->svt;
p3=p3->svt;
}
p->svt=p3;
p2->svt=p;
}
}
}
samedi 19 février 2011 à 19:51:14 | Re : fonction inserer dans une liste ordonnées+liste chainée

TychoBrahe

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++ :
strcpy(p->nom,nom);

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++ :
if(premier==NULL){

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.


Cette discussion est classée dans : p2, liste, premier, p3, svt


Répondre à ce message

Sujets en rapport avec ce message

problème c++ [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé problème multiplication [ par cricri nature ] Je veux multiplier 2 polynomes p1 et p2. Pour cela, j'ai créer 2 tableaux : tab[] qui stocke les degrés d'un monome et liste_monome[] qui stocke diffé liste circulaire avec la classe <list> [ par maincpp ] Aidez moi svp !!!! je voudrai savoir si on peut modeliser une liste circulaire avec la classe Focus sur une fenetre [ par Franck_P ] Voila mon problème :Je lance un premier programme (sorte de tableau de bord plein ecran) l'utilisateur a la possibilité de lancer un deuxieme programm créer une liste à partir d'un arbre [ par morganistic ] bonjour a tous!voila deux structures : une liste et un arbre.je n arrive pas a parcourir un arbre en inserant chaque noeud de l arbre dans une liste.. Liste des opérateurs [ par GIRAFE ENRHUMEE ] Bonjour, pouvez-vous m'indiquez un lien pour avoir la liste complète des opérateurs C++ dans l'ordre de leur préséance avec leurs associativités ?  Me Problème lors de la compilation [ par scano93 ] Salut à tous,Je suis un véritable débutant dans la programmation en C. Ayant des connaissances avec Visual Basic, j'ai voulu me lancer dans la program commencer en c [ par MoveX ] d habitude je programme sous delphi, mais linux m attirant, et ne possedant pas kylix, je desirais continuer a programmer sous linux. quoiqu il en soi Récupération de la liste des programmes installé [ par bou1024 ] Bonjour, J'aimerai savoir s'il est possible qu'un ordinateur A récupère dans un fichier la liste des programmes installés (la même liste qu'il y a dan Mise à jour d'un fichier texte [ par Neo020585 ] Bonjour à tous.J'ai un fichier "liste.txt" qui contient une liste de chemin d'accès à des fichiers avec leur date de dernière modification :ex. : ...C


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales