2010-09-18 38 views
0

Dans mon projet C++, j'ai une application App et une classe Window. Classe App a un paramètre: vector<Window*>* window;.Erreur d'exécution lors de l'accès à un vecteur

Dans le constructeur App, il est capable d'utiliser et push_back une fenêtre * sur ce vecteur bien, mais dans ma méthode onMessage(), qui est appelée par le WndProc() (j'utilise winapi), il me donne une erreur d'exécution lorsque j'essaie d'utiliser le vecteur. Ce sont des erreurs d'accès.

Qu'est-ce qui pourrait mal se passer? Si vous avez besoin de plus d'informations, il suffit de demander.

+6

Il serait utile de voir code. Le seul sur lequel je puisse faire une supposition est que c'est vraiment un pointeur vers un vecteur, pas un vecteur. – skimobear

Répondre

2

Soit le pointeur vers le vecteur n'est pas valide, soit les pointeurs du vecteur ne sont pas valides; probablement le premier dans ce cas. Cela se produit dans de nombreuses situations, telles que l'utilisation de pointeurs vers des objets locaux qui ont été détruits depuis.

(A part. Étant donné que vous avez inclus un point-virgule pour la fenêtre, je parie que c'est un membre de données plutôt que d'un paramètre)

Au lieu de stocker un pointeur de vecteur dans l'App, stocker un vecteur lui-même. Au lieu de stocker des pointeurs sur des objets Window, stockez les objets Window eux-mêmes. Cependant, cela nécessite que Windows soit copiable, ce qui n'est probablement pas le cas. Il interdit également de stocker des objets de types dérivés de Window. Au lieu de cela, vous pouvez utiliser un boost::ptr_vector, qui « possède » l'objets pointés et les supprimera quand ils sont effacés (par exemple lorsque le ptr_vector est détruit ou effacé):

struct App { 
    boost::ptr_vector<Window> windows; 

    App() { 
    // just an example 
    windows.push_back(new Window()); 
    windows.push_back(new DerivedFromWindow()); 
    } 
}; 
+0

Il s'avère que j'accédais à un objet qui n'existait pas (pointeurs ...) –