En fait... ce n'est pas si compliqué.
Avant de chercher où initialiser, sois sure d'avoir saisi la logique.
Avant de pouvoir accéder aux attributs d'une structure, il te faut être sur, qu'elle existe. Donc avant d'appeler:
ContextGlobal[n]->couple.intent.clear();
Tu dois être sure que le pointeur stocké à la position n de ton vecteur, pointe sur une structure existante.
Donc où initialiser, dépend de la logique de ton programme et d'où tu appelles la fonction qui exécute la boucle.
Dans les faits, oui, l'initialisation doit se faire avant l'accès à la structure.
Mais par sécurité, tu pourrais ajouter ceci:
1 2 3 4 5 6 7 8
| if(ContextGlobal[n] != NULL)
{
ContextGlobal[n]->couple.intent.clear();
ContextGlobal[n]->couple.extent.clear();
ContextGlobal[n]->pseudo.intent.clear();
ContextGlobal[n]->pseudo.extent.clear();
ContextGlobal[n]->concept.clear();
} |
Ce test va simplement s'assurer que le pointeur n'est pas null avant que le programme n'accède à la structure.
Autre chose, que cherches tu à faire avec ce code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| for (int q=0;q<20;q++)
{
p.intent.push_back(1);
p.extent.push_back(0);
ContextElement.pseudo=p;
cc=resultat;// resultat est un vecteur de int déjà rempli
ContextElement.concept=cc;
ContextElement.num_concept=1;
ContextGlobal[n]->couple=ContextElement.couple;
ContextGlobal[n]->pseudo=ContextElement.pseudo;
ContextGlobal[n]->concept=ContextElement.concept;
ContextGlobal[n]->num_concept=ContextElement.num_concept;
} |
Parce que là, tu remplaces successivement les attributs de ContextGlobal[n] par ceux du dernier ContextElement. Tu pourrais tout aussi bien sortir les 4 dernières lignes de la boucle et faire le remplacement une seule fois avec le dernier ContextElement, le résultat serait le même (et tu économiserais des opérations inutiles).
Partager