1

J'ai une erreur de segmentation que je n'arrive pas à corriger.
elle apparaît lorsque j'enlève une ligne qui ne fait rien qu'afficher du texte
par exemple lorsque la ligne en question vaut "std::cout << "La valeur est " << ma_variable << std::endl;" ça marche mais lorsque je mets "std::cout << "Ca marche" << std::endl;" bah ça marche pas!

J'ai enlevé le #include <iostream> et tous les cout, endl mais rien n'y fait.

2

Inclus ton source s'il est pas trop trop gros... Parceque la, dit comme ca...

3

Voilà la source de la fonction où ça plante PATH_BOOL CPath_Node::search( void ) {      if ( !this->isInitialized() )           return PATH_error;            if ( this->is_Searched )           return PATH_error;            if (this->add_node(this->object_start,NULL) == NULL)           return PATH_error;      PATH_NODE* current=NULL,* temp=NULL;            do      {           //Récuperer le meilleur noeud de la PATH_node_liste ouverte           if ((current = getBestNode()) != NULL)           {                // Le mettre dans la PATH_node_liste fermée                current->isClosed = true;                // Récupérer ses voisins                                for(unsigned long voisins = 0; voisins < this->getLinks(current->object); voisins++)                {                     unsigned long voisin = this->getLink(current->object,voisins);                     //std::cout << "Objet : " << current->object << ", voisin : " << voisin << std::endl;                     //std::cout << "Ca marche pas " << std::endl;                     temp = this->isObjectInList(voisin);                     if (temp == NULL)                     {                          this->add_node(voisin,current);                     }                     else                     {                          if ( this->isNewHeuristicBetterThanOld(voisin,current,temp) )                          {                               temp->parent = current;                               if (temp->isClosed == false)                                    this->setHeuristic(temp);                          }                     }                }           }      }      while(this->node_end == NULL && current != NULL);      this->is_Searched = true;      if (this->node_end == NULL)           return (PATH_BOOL)(this->is_Success = false);      this->is_Success = true;      this->gotoFirstObject();      this->buildFullPath();      return (PATH_BOOL)this->is_Success; }
Lorsque je décommente "std::cout << "Objet : " << current->object << ", voisin : " << voisin << std::endl;" ça marche.
Si je ne mets pas cette ligne ou si je mets par exemple "std::cout << "Ca marche pas? " << std::endl;" j'ai mon erreur de segmentation...

Je ne comprends vraiment pas ce qu'il y a!

4

Essaie de backtracer avec ton debuggueur favoris. Sinon fout des cout un peu partout pour espionner ce qui se passe.

5

spomky :
Lorsque je décommente "std::cout << "Objet : " << current->object << ", voisin : " << voisin << std::endl;" ça marche.
Si je ne mets pas cette ligne ou si je mets par exemple "std::cout << "Ca marche pas? " << std::endl;" j'ai mon erreur de segmentation...
Je ne comprends vraiment pas ce qu'il y a!

Bah étant donné que std::cout et cie ont une probabilité d'avoir des bugs légerement inferieure à celle de ton programme, à tous les coups tu vas devoir t'amuser à chercher un dépassement de mémoire quelque part (pas forcément ds la source que t'as postée, je l'ai pas lue en détail mais tu fais plein d'appels de fonctions dont on ne voit pas le code). Essaie valgrind ou electric fence, par exemple, y'a des chances qu'ils arrivent à te signaler les dépassements.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

6

J'imagine bien que cout doit avoir moins de bugs que ce que je fais mais tout de même entre std::cout << "Objet : " << current->object << std::endl; qui ne plante pas et std::cout << current->object << std::endl; qui fait tout planter ... il y a peu de différences

7

bah oui, y'en a simplement un qui par hasard déclanche ton bug et l'autre non, c'est déjà une chance d'avoir un cas qui plante tout le temps plutot qu'un bug totalement aléatoire
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

OK mais le "un" qui fait planter mon prog est le non-affichage d'une chaine de caractère qui est là pour m'aider à débugger.
Y a meme pas le moindre calcul ni la moindre op

9

Et alors, si ca se trouve, t'as une vieille erreur de debordement de memoire a un mmt et ca arrive la.
Utilise un debuggeur pour verifier...

10

en reformulant mon post #4 : non, ce n'est *pas* la stl qui bug, désolé mais le problème vient de façon quasiment certaine de ton code; si tu voulais bien utiliser un outil de debug, peut-être que tu aurais déjà trouvé l'origine du problème :/
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

11

sinon tu peux toujours te toucher la bite et faire l'avion, ça marche
avatar

12

Ah et euh....ce que t'as donné c'est une fonction, mais rien ne prouve que le bug est dans cette fonction.
Ca se trouve c'est qqc que t'as fait avant qui a écrasé des choses en mémoire, et ça ne provoque le plantage que plus tard, lors de l'appel de cette fonction.

13

il faudrait vraiment faire un topic en annonce "que faire en cas d'undefined behaviour", parce que c'est chiant de réexpliquer les mêmes trucs à chaque topic... (enfin perso j'ai eu la flemme de répondre quoi que ce soit dans ce topic tongue)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

14

déjà que personne ne lit quand le titre du topic répond explicitement à la question, mais alors là... j'ai perdu tout espoir perso grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

15

ben non, pas pour que les gens le lisent avant de faire un topic (surtout qu'a priori un newbie ne pourra pas savoir si ça correspond à son cas ou pas), mais pour qu'on puisse répondre en postant un lien au lieu de répéter 50x les mêmes choses... et ça sera sans doute aussi plus clair pour la personne à qui on répond ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

16

d'experience, ça fait pas tellement gagner de temps, mais si t'es volontaire y'a pas de pb, fais le topic et on re(-re-re-re)tentera l'experience grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

17

j'ai compris d'où viens le problème : j'ai utilisé cout << "Addresse de this : " << this << endl; et this change d'addresse pendant mes opérations.
Par contre je ne sais vraiment pas d'où ça vient... pour ce qui est de GDB et Valgrind j'avoue que je m'y perds un peu...

18

hmm il doit y avoir des tutos sur le net, probablement (pas cherché); pour ton problème, il est possible que GDB t'aide beaucoup (si tu sais quel est le problème et à quel endroit il se présente, le reste va vite en géneral)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

19

je sais quel est le problème.
La fonction en cause est lancée une bonne 20aine de fois sans que rien ne se passe. pourtant je ne touche pas à mon objet
	for ( unsigned long cptr = 0; cptr < this->node_number; ++cptr) //là this est bon
	{
		if (this->node_list[cptr]->object == object ) //là aussi
			return this->node_list[cptr]; //là non!
	}