Probleme mit Speicheradressen bei STL Listen/Vectoren
-
Hey @all,
und zwar möchte ich Personendaten, die ich in einer Struktur habe in eine Liste pushen, hier mal die Struktur:
struct persons { int id; std::string lastname; std::string firstname; std::string nickname; std::string birthdate; std::vector<address> addresses; std::vector<types> emails; std::vector<types> telephones; std::vector<types> faxes; std::vector<types> messengers; persons(){} };die liste und der iterator werden wie folgt erzeugt
typedef std::list<persons> PersonList; PersonList pl; PersonList::iterator plIter;So, nun zum Problem, ich schreibe die Anwendung mit BCB. Wenn ich nun eine eigene Liste in einer Methode erstelle, kann ich problemlos pushen
void CUserData::parseSource(std::string _source) { typedef list<persons> TestListe; TestListe tl; TestListe:iterator tlIter; persons p; memset(&p, 0, sizeof(p)); p.lastname = "Mayer"; p.firstname = "Michael"; tl.push_back(p); //--> FUNKTIONIERT pl.push_back(p); //--> Hier tritt eine EAccessViolation-Exception auf }Nun zu meiner Frage, warum kann ich nicht bzw. warum tritt eine Exception auf, wenn ich auf ein Privates Objekt in meiner eigenen Klasse zugreifen möchte, und nicht wenn ich in der Methode ein Objekt erzeuge.
Mir geht dieser Fehler nicht ein, mein Problem ist nur, das ich die Liste mit den Benutzerdaten noch in anderen Methoden brauche, somit brauche ich dieses Private Objekt (pl)
Wenn ich mir die Zeigeraddressen der beiden ansehe, dann habe ich bei der Liste die ich in der Methode erzeuge eine Adresse, und bei der Liste die ich in der Klasse erzeugt habe, habe ich den wert NULL:
PersonList* x = &pl; // Klassen-Liste (x:NULL) PersonList* x2 = &tl; // Methoden-Liste (x2: 0012F3B0)So, nun wo ist da jetzt das Problem, das ich in einem Privaten Klassenelement keine Adresse habe?
Was ist daran falsch?Kann mir hier bitte jemand weiterhelfen
Vielen Dank im Voraus
Lg _freeze_
-
Hallo
bist du dir denn sicher, das du eine gültige Instanz von CUserData hast, deren Methode parseSource du dann aufrufst?
bis bald
akari
-
Hallo,
ist parseSource static?
-
Ich habe schon öfters vector und map in ähnlicher Weise verwendet und hatte noch nie derartige Probleme.
Was ich nicht so ganz verstehe, ist, warum Du zwei typedefs machst?Ich mache das z.B. so:
// Header class MyClass { public: MyClass(); void foo(); private: typedef vector<TNode*> TNodeVector; TNodeVector FNodeVector; }; // Implementierung MyClass::MyClass(): FNodeVector(TNodeVector()) { } void MyClass::foo() { FNodeVector.push_back(new TNode()); }Das hat bisher einwandfrei funktioniert.
Bei Deinem Code-Ausschnitt ist mir nicht ganz klar, wo die Deklaration der privaten Member passiert.
Gruß,
Alexander
-
Danke an alle,
hatte zwar eine Referenz von meiner Klasse, jedoch diese Referenz nicht initialisiert. Ich hatte dies übersehen. Jetzt funktioniert es wieder.
Lg _freeze_