2010-11-04 37 views
0

J'ai cette déclaration d'un vecteur multidimensionnelVector initialisé avec la taille, impossible à effacer

std::vector< vector < vector <ofxImage> > > front_objects; 

Puis-je l'envoyer à ma classe lors de sa création:

Catalog_object * temp = new Catalog_object(&front_objects, numTag); 

Et puis j'effectuer les opérations suivantes :

Catalog_object::Catalog_object(vector< vector < vector <ofxImage> > > * _front_objects, int numTag) { 
    front_objects=_front_objects; 
    if (front_objects->size()<numTag+1) { 
     front_objects->resize(numTag+1); 
    } 
} 

Ce que je veux faire est de remplir la principale front_object s avec des vecteurs de ofxImages à partir des objets Catalog_, qui pourraient partager certains vecteurs de vecteurs d'ofxImages.

Le problème est que « parfois » le vecteur est initialisé avec les ordures et en essayant de le dégager avec

front_objects[numTag].resize(2); 

le programme se bloque avec un EXC_BAD_ACCESS

Lors du redimensionnement avec Redimensionner(), shouldnt il soit rempli de vecteurs vides?

Merci

Marc

MISE À JOUR

J'ai essayé de faire comme ça, mais j'obtenir "membre de référence 'non initialisée Catalog_object :: front_objects'".

Catalog_object::Catalog_object(vector< vector < vector <ofxImage> > > & _front_objects, int numTag) { // CHANGED * FOR & 
    std::vector< vector < vector <ofxImage> > > & front_objects; // CHANGED * FOR & 
    front_objects=_front_objects; 
    if (front_objects.size()<numTag+1) { 
     front_objects.resize(numTag+1); 
    } 
    front_objects[numTag].resize(2); 
} 


std::vector< vector < vector <ofxImage> > > front_objects; 
Catalog_object * temp = new Catalog_object(front_objects, numTag); // REMOVED & 
+0

commentaire Tangentielle. Ceci est vraiment un exemple canonique quand typedefs serait une bonne chose! –

+0

Je suis un débutant C++, je vais vérifier typedefs – Marc

+0

Je viens d'apprendre comment utiliser typedefs. Très facile et utile! http://www.functionx.com/cpp/keywords/typedef.htm – Marc

Répondre

2

Très probablement dans

front_objects[numTag].resize(2); 

numTag détient un index non valide.

Sans le code pertinent est difficile à dire. Effectivement, vous dites que chaque fois que vous entrez dans votre cuisine, vous entendez un son étrange. L'image du chat qui est coincée entre deux quelque chose rend probable que c'est le chat, mais pourrait être autre chose. :-)

Vive & HTH,

+0

Merci Alf, mais j'ai déjà pris soin de ça quand j'ai fait front_objects-> resize (numTag + 1); , ou ai-je tort? Je suis inquiet que je pourrais jouer avec les pointeurs ("pointant vers les mauvais endroits") – Marc

+1

@Mark: oh '****' (censuré). Vous voulez dire que cet appel resize est dans votre constructeur, où 'front_objects' a été déclaré comme un pointeur? Oh oh. Si c'est le cas, vous utilisez ce pointeur en tant que tableau, puis voici comment corriger: passez-le par référence plutôt que comme pointeur. C'est-à-dire, remplacez votre param formel * avec un '&', et remplacez '->' par '.', et supprimez l'opérateur d'adresse dans l'invocation. Salutations & hth., –

+0

Merci Alf. Oui, le redimensionnement est à l'intérieur du constructeur Catalog_object, peut-être dans la mise à jour que j'ai faite à mon code est plus clair. J'ai essayé d'appliquer vos suggestions, mais j'obtiens une erreur "membre de référence non initialisé". Je ne suis pas encore très bon en ce qui concerne les pointeurs, donc j'ai probablement fait autre chose de mal maintenant!: S Mon intention est que toutes les modifications soient faites toujours aux mêmes front_objects – Marc