1

Bonjour
je cherche a implementer un espace en 3D de maniere a ce quil soit divisé en case. Pour ceci j'utilise un vector< vector <vector <Case>>> ou Case es t une classe que j'ai creer.
J'initialise mon espace dans le constructeur du systeme qui gere le reste de ma simulation (projet sur la simulation de grain...) de la maniere suivante:

Systeme:sorryysteme()
:colgrain(),colobs(),colsou(),space()
{
for (unsigned int i(0);i<200;i++)
{
for (unsigned int k(0);k<200;k++)
{
for (unsigned int l(0);l<200;l++)
{
space [i] [k].push_back(Case(i,k,l));
}
}
}
}

Ici space est le nom de mon espace et le constructeur de case permet de fixer la position de chaque case.
lors de lexecution du programme j'ai une segmentation fault et le debugger me signal que mon probleme se trouve au niveau de l'iterateur utiliser par loperateur [ ] de vector.
Comment resoudre ce probleme?

2

bah c'est normal si tu n'as jamais initialisé les deux premières dimensions de ton vecteur "space" : tu essaies d'accéder à un élément [i] qui n'existe pas et à un élément [i][k] qui existe encore moins ^^

il faudrait que tu initialises toutes les dimensions au fur et à mesure, par exemple avec un code de ce style :
// Les deux lignes suivantes mériteraient quelques typedefs

vector<vector<vector<Case> > >::iterator	ti;
vector<vector<Case> >::iterator			tk;
unsigned int	i;
unsigned int	k;
unsigned int	l;

ti = space.begin ();

for (i = 0; i < 200; ++i)
{
    ti = space.insert (ti, vector<vector<Case> > ());
    tk = ti->begin ();

    for (k = 0; k < 200; ++k)
    {
        tk = ti->insert (tk, vector<Case> ());

        for (l = 0; l < 200; ++l)
        {
            tk->push_back (Case (i, k, l));
        }
    }
}

Attention aux indices [i] & co dans tes posts qui sont pris en compte par le forum comme des balises de mise en forme.

Au fait, à quoi sert d'appeler explicitement les constructeurs par défaut des classes inclues dans ta classe "Systeme" ?

[edit] Pour faire plus simple, je viens de voir que la classe vector a une méthode "reserve" qui préalloue le vecteur à une taille définie.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

merci beaucoup de ton aide
Pour les constructeurs par defaut en fait je croi quils ne servent a rien ici.
merci encore.