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 : 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;
}
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.