Speicherzugriffsfehler beim Iterieren über std::list<MyObject*>
-
moin,
ich verwalte in
std::list<MyObject*> myListeine Reihe von Objekten die es via Event zu speichern gilt.
gespeichert wird in xml per xerces-c SAX/DOM api.ich erstelle ein domdocument und so weiter... wunderbar muss nicht weiter erläutert werden.
DAS PROBLEM taucht auf, sobald ich über diese list iteriere und mit dem iteratorzeiger auf das jewilige objekt zeige, welches eine instanz der klasse hält, das wiederum diese liste hält.beim debuggen ist aufgefallen, dass die liste der grund für den speicherzugriffsfehler ist. ich komm nicht mer weiter bitte um hilfe.
class Game: public Gtk::Window { ... }; void Game::toDOM() { XMLPlatformUtils::Initialize(); static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull }; DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(gLS); XMLCh tempStr[100]; XMLString::transcode("document", tempStr, 99); DOMDocument* doc = impl->createDocument(0, tempStr, 0); XMLString::transcode("root", tempStr, 99); std::cout<<"nach root;"<<std::endl; DOMNode* node=doc->createElement(tempStr); std::cout<<"nach DOMElement* rootnode=doc->getDocumentElement();"<<std::endl; /////////////////ab hier typedef std::list<MyObject*>::iterator iter ; for (iter i = this->spiel->list.begin(); i != this->spiel->list.end();i++){ // hier sind schon element deklarationen // alle attribute durch i->toXML(doc) gesetzt ///////////////////////////////////////////////////// // hier wird speicherzugriffsfehler ausgelöst!!!!! // ///////////////////////////////////////////////////// DOMElement* temp = (*i)->toXML(doc); std::cout<<"temp zuweisung"<<std::endl; node->appendChild(temp); } std::cout<<doc<<std::endl; serializeDOM(doc); doc->release(); }
-
Anhand des Codes lässt sich nicht erkennen ob this->spiel, this->spiel->list oder this->spiel->list[n] vernünftig (oder überhaupt) initialisiert wurden.
-
sie sind, da an anderer stelle schon durch callbacktimer alle x hundertstel sekunden über diese liste iteriert wird und mit den objekten auf die der iterator zeigt gearbeitet wird. das läuft schon.
die iteration ist nicht das problem. sie fiundet an anderer stelle HAARGENAUSO statt....
ich bin am verzweifeln