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 :
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 ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
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.
Partager