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

  FORUM HardWare.fr
  Programmation
  C++

  probleme de endl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme de endl

n°1617927
patastronc​h
Posté le 02-10-2007 à 15:39:12  profilanswer
 

J'ai un probleme sur lequel je plante totalement.
 
J'ai une fonction blabla :
 

Code :
  1. float blabla(int a, int b){
  2.    objet1 x;
  3.    double c=x.fonction1(a,b);
  4.    while(c<10) c=x.fonction1(a,b);
  5.    cout << endl;
  6.    return c;
  7. }


 
fonction1 est une méthode de la class objet1, elle genere un nombre aléatoire en gros.
Mon probleme est le suivant, le cout << endl; ne sert a rien comme vous l'avez remarqué, mais si je ne met pas cette ligne, le programme s'excute puis bloque, c est a dire qu'il n e fait rien. Par contre quand cette ligne est présente il n'y a aucun probleme. Quelqu'un aurait une idée sur l'origine de ce probleme ??  
 
Merci d'avance pour votre attention !


Message édité par patastronch le 02-10-2007 à 15:39:44
mood
Publicité
Posté le 02-10-2007 à 15:39:12  profilanswer
 

n°1617928
patastronc​h
Posté le 02-10-2007 à 15:40:45  profilanswer
 

Je précise que cout << de n'importe quoi d'autre ca ne marche pas, y a que le endl ou le '\n' qui font que ca fonctionne.

n°1618099
Ace17
Posté le 02-10-2007 à 19:37:50  profilanswer
 

L'erreur est dans le code de ta fonction1....
est-ce que si tu remplaces le  
cout << endl;
par
cout.flush();
ca fait pareil ?

n°1618108
Joel F
Real men use unique_ptr
Posté le 02-10-2007 à 20:10:57  profilanswer
 

quand ca plante et que ca marche en rajoutant une IO ca sent la memory leak qq part. Verifie le code de function1, ca n'a AUCUN rapport avec endl.

n°1618753
grostony
Posté le 04-10-2007 à 11:51:15  profilanswer
 

Salut,
Est-ce qu'une erreur spécifique est affichée quand le programme plante? Genre segmentation fault? Car c'est fréquent que, quand un programme plante, si tu met par exemple un printf (donc cout aussi) au milieu pour faire un pseudo debug en affichant les valeurs des variables il se mette à ne plus planter.
Je suis donc la pensée de Ace17 et de Joel F: l'erreur est dans ton code (suivant ce que fait fonction1, il peut y avoir une division par zéro par exemple).
As-tu essayé d'exécuter ton code pas à pas avec un debugger? Sinon de pseudo débugger en affichant les valeurs de a, b et c à chanque pas du while? Voir s'il n'y a pas quelque chose de 'louche'.
@+

Message cité 1 fois
Message édité par grostony le 04-10-2007 à 11:51:44
n°1619228
Ace17
Posté le 04-10-2007 à 19:08:05  profilanswer
 

grostony a écrit :

c'est fréquent que, quand un programme plante, si tu met par exemple un printf (donc cout aussi) au milieu pour faire un pseudo debug en affichant les valeurs des variables il se mette à ne plus planter.

Ca, c'est surtout vrai quand tu es multithreade. D'ailleurs, a la relecture du post de l'auteur du topic, je me demande si ca n'est pas le cas. Sa description ressemble pas mal a un interblocage.

Message cité 1 fois
Message édité par Ace17 le 04-10-2007 à 19:08:24
n°1619444
grostony
Posté le 05-10-2007 à 10:14:33  profilanswer
 

Ace17 a écrit :

Ca, c'est surtout vrai quand tu es multithreade. D'ailleurs, a la relecture du post de l'auteur du topic, je me demande si ca n'est pas le cas. Sa description ressemble pas mal a un interblocage.


Bah je sais pas, perso dans des programmes qui ne sont pas multithread (enfin je pense car je n'ai rien fait de spécial pour qu'il soit multithread) ça me le fait souvent. Pas d'exemple en tête mais plein de souvenirs de 'pseudo' debug quand j'étais à la fac :D.

n°1619567
Joel F
Real men use unique_ptr
Posté le 05-10-2007 à 11:49:58  profilanswer
 

le multi thread n'a rien à voir. En general, ca provient d'un depassement de borne de tableau ou d'acces à une zone mémoire non allouée.

n°1619800
grostony
Posté le 05-10-2007 à 15:49:14  profilanswer
 

C'est bien ce que je pensais, ça arrive dans un cas de plantage trivial (genre depassement de borne de tableau ou d'acces à une zone mémoire non allouée comme tu dis).
@+

n°1619951
Ace17
Posté le 05-10-2007 à 19:39:05  profilanswer
 

Joel F a écrit :

le multi thread n'a rien à voir. En general, ca provient d'un depassement de borne de tableau ou d'acces à une zone mémoire non allouée.

Bien sur que si, parce que la trace d'execution change le timing de ton programme, en plus de creer des points de rendez-vous inopportuns entre les threads.  Pour ces deux raisons, il est possible qu'un programme qui deadlocke sans trace d'exec s'execute sans probleme lorsqu'on rajoute des printfs.
 
Dans la grande majorite des cas, un depassement de borne de tableau ou l'acces a une zone memoire inexistante finit par provoquer une exception... ce qui n'est apparemment pas le cas. Ce serait bien que l'auteur du topic re-poste pour nous dire ou il en est.

mood
Publicité
Posté le 05-10-2007 à 19:39:05  profilanswer
 

n°1619961
patastronc​h
Posté le 05-10-2007 à 20:12:52  profilanswer
 

Le cout.flush(); ou cout << flush; ne font pas marcher le programme. Seul cout << endl; fait que ca marche (a la fois j 'ai pas tout cherché non plus :) ). Les cout sur les variable sans endl a la fin ne font pas fonctionner le bout de code.
 
Quand le programme plante, aucun message d'erreur, juste ca fait plus rien, gdb me dit que le prog est coincé dans la fonction 1 fonction blabla (edit)  rien de plus.
 
Je reppel que avecle cout << endl; tout marche sans probleme ! Ce n'est donc pas une eventuelle division par zéro ou ce genre de chose qui provoque le plantage.
 
J'ai pas regardé si y avait du memory leak, je vais mater ca a tete reposée. Sinon j'ai reussi a faire fonctionner le programme sans cout << endl; en remplacant les double par des floats. C'est encore plus incomprehensible pour moi le fait que ca marche avec des floats et pas des doubles.
 
J'aimerais, meme si c est résolu, comprendre la source du probleme. Est ce que quelqu'un saurait exactement ce que fait cout << endl; de plus qu'un cout << flush, ou un cout de n'importe quoi ???


Message édité par patastronch le 05-10-2007 à 20:34:32
n°1619964
patastronc​h
Posté le 05-10-2007 à 20:18:35  profilanswer
 

Quand je dis seul cout << endl; fait que ca fonctionne c'est faux, il y a aussi cout << "\n"; :p

n°1619965
Joel F
Real men use unique_ptr
Posté le 05-10-2007 à 20:20:10  profilanswer
 

endl = \n + flush ;)
 
et donne le code de cette fonction boudiou

n°1619971
patastronc​h
Posté le 05-10-2007 à 20:30:29  profilanswer
 

Alors qu'est ce qui différentie un cout << "\n" d'un cout << "a" ??? y abien un truc c'est pas possible.
 
Sinon pour le code ca risque d etre imbouffable, c est une fonction perdu au milieu de miliers de lignes :) Je vous le mettrais lundi qaund je serais au labo.

n°1619981
Joel F
Real men use unique_ptr
Posté le 05-10-2007 à 20:50:57  profilanswer
 

bah cout comme printf effectue un flsuh lorsque on leur demande ou lorsque un \n arrive dans le buffer.

n°1619990
patastronc​h
Posté le 05-10-2007 à 21:23:06  profilanswer
 

l'ennuie c est que ca viens pas flush, puisque cout << flush ne fonctionne pas.

n°1620035
Ace17
Posté le 06-10-2007 à 09:31:32  profilanswer
 

patastronch a écrit :

l'ennuie c est que ca viens pas flush, puisque cout << flush ne fonctionne pas.

D'un cote, si y'a rien a  
flusher... essaie :
cout << "a"; cout.flush();
 
Mais bon, au final tous ces tests ne nous meneront pas tres loin :) Donne plutot le code de la fonction...


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

  probleme de endl

 

Sujets relatifs
probleme site webProblème sur l'affichage d'images
Problème RMI Windows/LinuxMenu javascript : probleme avec IE7
Problème CSS sous IE :(probleme d installation oracle
Probleme avec l'installation d'Apachegcc Probleme de link
Problème Compilation avec Code::Blockproblème Java Script et css
Plus de sujets relatifs à : probleme de endl


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