J'ai ce destructeur qui crée une erreur à l'exécution "vector itérateur non déréférencable".itérateur vectoriel non déréférencable à l'exécution sur un vecteur <vector <vector<A*> *> *>
Le gridMatrix est un vecteur std :: < std :: vector < std :: vecteur < AtomsCell < Atom <T> * > * > * > * >
j'ai ajouté le typename et aussi le typedef mais J'ai toujours l'erreur.
Je vais me déplacer pour cette idée de vect de vect * de vect * pour utiliser boost :: multi_array Je pense, mais je veux quand même comprendre si c'était faux.
/// @brief destructor
~AtomsGrid(void) {
// free all the memory for all the pointers inside gridMatrix (all except the Atom<T>*)
//typedef typename ::value_type value_type;
typedef std::vector<AtomsCell< Atom<T>* >*> std_vectorOfAtomsCell;
typedef std::vector<std_vectorOfAtomsCell*> std_vectorOfVectorOfAtomsCell;
std_vectorOfAtomsCell* vectorOfAtomsCell;
std_vectorOfVectorOfAtomsCell* vectorOfVecOfAtomsCell;
typename std_vectorOfVectorOfAtomsCell::iterator itSecond;
typename std_vectorOfVectorOfAtomsCell::reverse_iterator reverseItSecond;
typename std::vector<std_vectorOfVectorOfAtomsCell*>::iterator itFirst;
//typename std::vector<AtomsCell< Atom<T>* >*>* vectorOfAtomsCell;
//typename std::vector<std::vector<AtomsCell< Atom<T>* >*>*>* vectorOfVecOfAtomsCell;
//typename std::vector<std::vector<AtomsCell< Atom<T>* >*>*>::iterator itSecond;
//typename std::vector<std::vector<AtomsCell< Atom<T>* >*>*>::reverse_iterator reverseItSecond;
//typename std::vector<std::vector<std::vector<AtomsCell< Atom<T>* >*>*>*>::iterator itFirst;
for (itFirst = gridMatrix.begin(); itFirst != gridMatrix.end(); ++itFirst) {
vectorOfVecOfAtomsCell = (*itFirst);
while (!vectorOfVecOfAtomsCell->empty()) {
reverseItSecond = vectorOfVecOfAtomsCell->rbegin();
itSecond = vectorOfVecOfAtomsCell->rbegin().base();
vectorOfAtomsCell = (*itSecond); // ERROR during run: "vector iterator not dereferencable"
// I think the ERROR is because I need some typedef typename or template ???!!!
// the error seems here event at itFirst
//fr_Myit_Utils::vectorElementDeleter(*vectorOfAtomsCell);
//vectorOfVecOfAtomsCell->pop_back();
}
}
fr_Myit_Utils::vectorElementDeleter(gridMatrix);
}
Si quelqu'un veut le code complet qui crée l'erreur, je suis heureux de donner, mais je ne pense pas que nous pouvons joindre un fichier dans le forum. MAIS, ce n'est pas très grand, donc si vous le voulez, je peux le copier ici.
Merci
typenamef et typedef ne fera probablement aucune différence lors de l'exécution. –
Pourquoi faites-vous tout un pointeur? Avec les types concrets et les pointeurs intelligents, vous n'avez peut-être pas besoin d'un destructeur. –
Merci, j'ai obtenu ce typename et typdef sont inutiles ici. – marouanebj