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