J'ai ce morceau de code:faisant référence à un vecteur :: œuvres avant, mais vecteur :: commencer ne pas
cerr << client->inventory.getMisc().front()->getName() << endl;
vector<itemPtr>::iterator it;
it = client->inventory.getMisc().begin();
cerr << (*it)->getName() << endl;
Laissez-moi vous expliquer qu'un peu:
client
est un tr1::shared_ptr
que les points à un objet qui a un membre nommé inventory
qui a un membre privé vector<itemPtr>
accessible par getMisc()
. itemPtr
est un typedef pour tr1::shared_ptr<Item>
, et getName()
renvoie un std::string
membre privé de Item
.
Essentiellement, client->inventory.getMisc()
se résume à std::vector
, et j'essaye d'obtenir un itérateur à son premier élément.
Le problème est que la quatrième ligne segfaults. Apparemment, l'itérateur ou le shared_ptr point vers est invalide. J'ai utilisé la première instruction cerr pour tester si le vecteur lui-même était valide, et il imprime comme il se doit, donc je pense que c'est le cas.
Est-ce que je fais quelque chose de mal? Alternativement, que feriez-vous les gars pour déboguer cela?
Rahter que "expliquer un peu" pouvez-vous fournir du code. Les gens sur ce site sont plutôt doués pour comprendre le code et pour comprendre ce que cela signifie. Et c'est beaucoup plus précis qu'une description en anglais. –