Erreur de corruption mémoire apres un "vector.resize"
Bonjour a tous et a toutes,
Excusez moi pour les accent, je n'ai qu'un clavier qwerty, et excusez moi aussi pour mon faible niveau en language C++, c'est pour cette raison que je solicite votre aide et votre immense experience.
Je travaille dans la physique subatomique, et j'ai concu un programme de simulation pour effectuer des interactions a N corps (genre : gestion des effets PhysX de nvidia). Ce programme utilise des calculs assez complexes, mais pour plus de facilite, je stocke, a chaque pas de temps, des tableaux dynamiques de donnees necessaires aux calculs.
Sauf que : mon nombre de particules augmente au fur et a mesure par fission (c'est ce que je veux) : quand cela se produit j'obtiens une erreur :
***glibc detected*** malloc(): memory corruption (fast): 0x.........
Cela veux dire que malgre la quasi-perfection de la STL, la fonction resize que j'utilise pour mes vector< vector<TYPE> > n'utilise pas correctement l'allocation memoire.
Voila une "ebauche" du code que j'utilise :
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
|
Class SYSTEM
{
public :
SYSTEM() {};
~SYSTEM() {};
... // quelques reglages de parametres.
private :
int n_particules;
vector< vector<double> > A_ij;
vector< vector<double> > B_ij;
...
void calcul();
void etape_1();
void etape_2();
}
void SYSTEM::calcul()
{
n_particules = ...; // calcul.
}
void SYSTEM::etape_1()
{
A_ij.resize(n_particules, vector<double>(n_particules));
}
void SYSTEM::etape_2()
{
B_ij.resize(n_particules, vector<double>(n_particules));
}
int main()
{
SYSTEM system;
system.calcul();
system.etape_1();
system.etape_2();
return EXIT_SUCCESS;
} |
En gros, si mon programme etait cette ebauche : des que n_particules changerais il effectuerait correctement le resize de A_ij, et il indiquerait le message d'erreur au niveau du resize de B_ij. C'est etrange, non ?
Pourquoi le resize d'un vector contenu dans un objet comme tableau dynamique ferait de la corruption de memoire ?
Si vous avez de l'experience vis-a-vis des memory corruption avec des vector.resize, je suis tres interesse par votre aide. Merci d'avoir lu ce message assez long.