Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1614 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  erreur dans un programm void après la dernière ligne

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

erreur dans un programm void après la dernière ligne

n°2084746
nausikaa
Posté le 24-06-2011 à 17:12:20  profilanswer
 

Bonjour,  
 
Je suis débutante en C++, et j'ai fait un petit programme qui marchait très bien jusqu'à ce matin.
 
j'ai un main avec un appel à une fonction, le programme effectue la fonction en entier, mais n'en sort jamais!!! C'est une fonction void et je ne fais rien après cette fonction...
 
int main() {
    reseau R ("monfichier.tsp" );
    arbre A =prim(R);
    creation(A);
    return 0;
}
 
et ça plante dans creation(A):
void creation(arbre &A)
{
 vector<soustournee> itineraire(A.dim_D+A.dim_S);
 
 soustournee temp;
 
 for(int i=A.dim_D;i<A.dim_D+A.dim_S;i++)
 {
  temp=tournee(A,i);;
  itineraire[i]=temp;
 }
 
 cout<<"les satellites ont été traités avec succès"<<endl;
 
 for(int i=0;i<A.dim_D;i++)
 {
  temp=tournee(A,i);
  itineraire[i]=temp;
 }
 
 cout<<"les dépôts ont été traités avec succès"<<endl;
 
}
 
mon programme affiche "les dépôts ont été traités avec succès" mais plante après.  
 
Quelqu'un aurait une idée sur les raisons de ce plantage?
 
merci

mood
Publicité
Posté le 24-06-2011 à 17:12:20  profilanswer
 

n°2084759
shaoyin
Posté le 24-06-2011 à 17:21:10  profilanswer
 

Quand tu dis que le programme plante... Il se crashe, ou il semble bloqué dans une boucle infinie ?
 
Bon, sinon, quelques remarques sur la forme :
- utilise les balise de code quand tu postes du code, ca facilite la vie par la suite
- la préincrémentation (++i) est plus performante que la postincrémentation (i++). C'est une bonne pratique de prendre l'habitude d'utiliser ++i

n°2084815
Joel F
Real men use unique_ptr
Posté le 24-06-2011 à 21:07:07  profilanswer
 

shaoyin a écrit :


- la préincrémentation (++i) est plus performante que la postincrémentation (i++). C'est une bonne pratique de prendre l'habitude d'utiliser ++i


 
ouais c'etait vrai en 1345, ca ne l'ai plus.  
 
Le vrai probleme viens que ta fonction creation, ca serait de meilleur gout si il s'agissait du constrcteur de A, et que A (dont on a pas le code) implemente une semantique de valeur en respectant la forme canonique de coplien : constructeur par defaut, par copi, affectation destruction.
 
Idem pour reseau, ca ca la classe avec un destructeur foireux.

n°2085925
nausikaa
Posté le 29-06-2011 à 17:08:11  profilanswer
 

Merci beaucoup à tous les deux,  
 
pour le i++ par rapport au ++i, je le changerai, vu que je risque d'avoir énormément de données à traiter, ça sera peut-être un plus pour que ça aille plus vite.
 
Pour le reste, mon programme se crashe, un petit message apparaît et m'annonce que windows a planté. Il n'est pas bloqué, il s'arrête carrément.  
 
 
Je n'ai pas mis le code de A parce qu'il est long et qu'il marche. C'est juste un arbre couvrant de poids minimum, et ce code a déjà été validé pour plusieurs projets, donc si le problème venait de là, je l'aurai rencontré avant.
 
La fonction création ne peut pas être le constructeur de A pour de multiples raisons, dont la principale est que ce qui sort de création, ou plutôt ce que je modifie dans création, c'est un vecteur de tournées (en gros une matrice avec des clients et des demandes), et plus du tout un arbre. Je me sers juste de cet arbre pour créer le vecteur de tournées.
 
 
Sinon, la classe tournée a un constructeur par défaut et un constructeur par recopie, tout comme la classe réseau.
Il se trouve qu'en fait... je n'ai pas fait de destructeurs ^^. Mon problème viendrait-il de là? ^^ Je pensais que les destructeurs étaient utiles lorsque l'on a des pointeurs, or je n'ai pas de pointeurs.  
 
J'espère que c'est assez clair...

n°2085962
Amonchakai
Posté le 29-06-2011 à 21:38:56  profilanswer
 

Joel F a écrit :

ouais c'etait vrai en 1345, ca ne l'ai plus.


Ok, donc maintenant le compilo est capable de détecter si la copie est utile ou non... Pour info, tu as un site a recommander pour avoir ce genre d'info sur l’évolution des compilo et tout? Ou c'est ton exp. professionnelle?
 
Car je me suis un peu arreté au bouquins de scott meyers et il pronait ce genre de pratique...


Message édité par Amonchakai le 29-06-2011 à 21:40:33
n°2085966
Joel F
Real men use unique_ptr
Posté le 29-06-2011 à 22:24:54  profilanswer
 

Je bosse dans le HPC et les compilos c'est mon gagne pain quelque part donc je commence un peu a le savoir. Le seul endroit ou ca joue c'est si ton iterateur custom est si mal ecrit que tu fais 345897 allocs memoires dans ++. Sur des index entiers, 0 impact.
 
En outre, si le truc est bien fait, la copie inutile est elidé dans le dead-code elimination pass.  
 
Sinon en vrac :
 
http://cpp-next.com/ et plus particulierement les articles sur la copy-elision et le pass-by-value.
 
Y aussi un ppt qui traine et que je ne retrouve pas sur une analyse fine sur gcc/icc/msvc de toutes ces grandes blague ( ++i vs i++, for a la place de while, << a la place de * etc) ou il montre que bah c'est des FUD 99% du temps. Je poste le lien qd je le retrouve

n°2085972
Amonchakai
Posté le 29-06-2011 à 23:15:50  profilanswer
 

Ok, merci.  :jap:  
 
C'est vrai que tu avais déjà parlé des pass-by-value pour le choix passage par ref / par valeur. Mais je n'ai que survolé l'article jusqu’à présent...  
Je vais regarder cela.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  erreur dans un programm void après la dernière ligne

 

Sujets relatifs
Message d'erreurTrie par ordre alphabetique ligne fichier txt
VBA : Erreur de syntaxe dans un champs WordSpam par /trackback qui génère erreur 404
vente de musique en ligneDéveloppement d'un outil de personnalisation en ligne
Extraire un mot d'une ligne suivant ce qui l'encadre[Javascript] sans doute une petite erreur dans mon javascript
[Gestion d'erreur] comment remplacer un goto ?erreur de requete mysql -mysql_fetch_array(): supplied argument is not
Plus de sujets relatifs à : erreur dans un programm void après la dernière ligne


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR