Itterieren über eine Collection
-
Hallo ,
ich habe eine Collection
using namespace std; list<CString*> m_pobDateien;Diese Collection fülle so aus:
CString sDateiname; sDateiname = m_pobDateien.push_back( &sDateiname );Wenn ich über diese Collection itteriere
CString sDateiname; CString* poDateiname = 0; list<CString*>::iterator oIter; for( oIter = pobDateien.begin(); oIter != pobDateien.end(); ++oIter ) { poDateiname = ( *oIter ); if( poDateiname ){ sDateiname = *poDateiname; } }dann stürze ich an der Zeile : sDateiname = *poDateiname; ab.
Was kann der Grund sein ?
Danke.
Viele Grüße ,
Elke
-
Vielleicht solltest du statt Zeigern lieber die Objekte selber in deiner list speichern. Und wenn du doch Zeiger brauchst, erzeuge sie per new auf dem Heap.
(die Variable sDateiname, deren Adresse du eingetragen hast, ist beim Auslesen schon lange nicht mehr gültig - also zeigen die list-Elemente auf irgendwelchen Datenmüll im Stack)
-
Ich ergänze mal In-Place:
Elke100 schrieb:
{ CString sDateiname; // lokale Variable sDateiname = m_pobDateien.push_back( &sDateiname ); // Adresse einer lokalen Variable } // lokale Variable stirbt -> in der Collection steht ein ungültiger ZeigerDas ist der Grund

Aber musst Du wirklich Zeiger in den vector packen? CString (wenn von MFC) ist doch sogar Referenzgezählt.
-
Hallo CStoll,
stimmt ! Ich gehe ja aus der Methode raus ...
Mensch , habe doch schon ein paar Mal so einen Fehler gehabt

Danke!
Viele Grüße ,
Elke