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.
Inclus ton source s'il est pas trop trop gros... Parceque la, dit comme ca...
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!
Essaie de backtracer avec ton debuggueur favoris. Sinon fout des cout un peu partout pour espionner ce qui se passe.
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
Zeph Le 18/06/2006 à 22:21 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

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
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
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...
Zeph Le 18/06/2006 à 23:49 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 :/

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)
insoo Le 19/06/2006 à 01:19 sinon tu peux toujours te toucher la bite et faire l'avion, ça marche
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.
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)
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...
Zeph Le 03/07/2006 à 21:17 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)

All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez
par ici :)