Hello tout le monde,
voilà, j'ai un bête problème de pointeur dans mon code qui m'amène à une erreur de type
*** glibc detected *** ./percolation: double free or corruption (!prev): 0x09525138 ***
Voici les bribes utiles de mon code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| int *lat; //<- variable déclarée globalement
percolation::percolation(int seed, float proba, int N)
{
...
lat = new int[squareN]; //a l'initialisation de la classe, j'alloue la mémoire à ma variable
...
}
//A un moment, j'appelle la fonction suivante
int percolation::addToCluster(int i,int mainCluster,int * M,int k)
{
...
lat[i] = lat[mainCluster]; //<- selon mes tests, c'est précisément à cause de cette ligne que l'erreur apparait.
M[lat[i]]++;
return k;
}
//naturellement, le destructeur de mon objet libère la mémoire
percolation::~percolation()
{
delete [] lat;
} |
Concernant la ligne
lat[i] = lat[mainCluster];
Si je la mets en commentaire, je n'ai pas l'erreur. Si je la remplace par quelque chose du style
Je n'ai pas l'erreur.
J'appelle aussi la fonction addToCluster a un autre moment du code mais ca ne pose pas de bugg non plus...
Voila, ca fait un moment que je tourne en rond sur google, sans trouvé la solution à mon problème.
Si quelqu'un à une idée, je serais vraiment content.
Salutations.
Partager