Comment debugger : incorrect checksum for freed object
toe
-
toe -
toe -
Bonjour,
Je cherche à effectuer un algorithme de plus court chemin successivement sur plusieurs graphe, pour ce faire j'utilise la boucle suivante:
Mais à la 2eme itération lorsque je veux créer mon graphe j'obtiens l'erreur suivante :
deltaPlaningEA(2859,0x7fff7a144960) malloc: *** error for object 0x7f98494018b8: incorrect checksum for freed object - object was probably modified after being freed.
Qui a lieu plus exactement à l'endroit commenté ERREUR :
A vrai dire je cherche depuis plusieurs heures, mais je n'ai vraiment plus d'inspiration...
Auriez vous des suggestions quand à l'origine possible de ce bug?
Je remercie de part avance ceux qui auront le courage de se pencher sur ce problème
Je cherche à effectuer un algorithme de plus court chemin successivement sur plusieurs graphe, pour ce faire j'utilise la boucle suivante:
for(i=0;i< indi[0].getNbPeriodes();i++) { //On regarde s'il y a à reévaluer if(indi[0].getEvalSemaine(i)==-1) { //On construit le graphe // cout<<"on va creer graphe \n"; double aDeverser =indi[0].getQuantiteSemaine(i); Graphe G(pas,longueurPeriode,i*longueurPeriode,quantiteDeversee,aDeverser,&systeme); cout <<"sommets créés : "<<G.getNbSommet()<<endl; if(indi[0].getQuantiteSemaine(i)!=aDeverser) { double diff= indi[0].getQuantiteSemaine(i)-aDeverser; indi[0].setQuantiteSemaine(i-1,indi[0].getQuantiteSemaine(i-1)+ diff); indi[0].setQuantiteSemaine(i, aDeverser); } G.genererArcs(); //cout<<"on a cree graphe \n"; //On applique l'algorithme de Bellman double eval = G.plusCourtChemin(); indi[0].setEvalSemaine(i,eval); } evaluation= evaluation+indi[0].getEvalSemaine(i); quantiteDeversee= quantiteDeversee + indi[0].getQuantiteSemaine(i); }
Mais à la 2eme itération lorsque je veux créer mon graphe j'obtiens l'erreur suivante :
deltaPlaningEA(2859,0x7fff7a144960) malloc: *** error for object 0x7f98494018b8: incorrect checksum for freed object - object was probably modified after being freed.
Qui a lieu plus exactement à l'endroit commenté ERREUR :
Graphe( int _pas, int _nbHeures, int _heureDebut,double qtePerdu, double &_qteADeverser, Systeme* _systeme) { //variables int i,j; double V; double max=0; pas=_pas; nbHeures=_nbHeures; heureDebut=_heureDebut; systeme= _systeme; qteADeverser=_qteADeverser; Vinit = systeme->getReservoirs()[1].getVinit() - qtePerdu; for(i=0;i<heureDebut;i++) { Vinit= Vinit + systeme->getReservoirs()[1].getApport()[i]- systeme->getReservoirs()[1].getReserve(); } if (Vinit<0) { qteADeverser= qteADeverser -Vinit; Vinit=0; } V= Vinit; bool verif; reserve= systeme->getReservoirs()[1].getReserve(); Apport=(double*)malloc( nbHeures*sizeof(double)); kmax=0; Vmax= systeme->getReservoirs()[1].getVmax(); nbTurbine =systeme->getNbTurbines(); for(i=heureDebut;i<heureDebut+nbHeures;i++) { Apport[i]= systeme->getReservoirs()[1].getApport()[i]; } for(i=0;i<nbTurbine;i++) { kmax= kmax + systeme->getTurbine(i).getQMax(); } cout <<"on va creer les sommets\n"; //Création des sommets : //histoire du Vracine à revoir... Sommet racine(V,heureDebut-1,qteADeverser); nbSommets= 1; cout <<"on va ajouter racine\n"; //cout<< sommets.size()<<endl; sommets.push_back(racine);//ERREURE cout <<"on a ajouté racine\n"; for(i=0;i<nbHeures-1;i++) { verif=false; V=V + Apport[i]-reserve; max=max+ kmax; if(max>V) max=V; if(max> qteADeverser) max =qteADeverser; j=0; while(j<=max) { if(V-j <= Vmax) { Sommet s(V-j,i+heureDebut, qteADeverser-j); sommets.push_back(s); nbSommets++; verif=true; } j=j+pas; } if(verif==false) { Sommet sommet (Vmax,i+heureDebut,qteADeverser-(V-Vmax)); sommets.push_back(sommet); nbSommets++; max= V-Vmax; } } V=V+Apport[nbHeures-1] - reserve; if(V-qteADeverser>0) { Sommet sommet(V- qteADeverser,nbHeures-1+heureDebut,0); sommets.push_back(sommet); } else{ Sommet sommet(0,nbHeures -1 +heureDebut,0); sommets.push_back(sommet); } nbSommets++; // cout <<"fin creation sommets "<<endl; }
A vrai dire je cherche depuis plusieurs heures, mais je n'ai vraiment plus d'inspiration...
Auriez vous des suggestions quand à l'origine possible de ce bug?
Je remercie de part avance ceux qui auront le courage de se pencher sur ce problème