Probleme mit std::list



  • Hallo

    Ich habe mal wieder ein Problem, wo ich einfach nicht weiter komme. Folgendes Szenario:
    Ich versuche Daten aus einer Datei zu lesen und diese in einer Liste zu speichern:

    for(int i=0; i<p_iSizeOfHighScore; i++)
    	{
    		m_FileToReadOut>>m_TempPair.first>>m_TempPair.second;
    		Logfile->fTextOut("Durchlauf: %d, First: %s, Second: %d<br>",i,m_TempPair.first.c_str(),m_TempPair.second);
    		m_List.push_back(&m_TempPair);
    	}
    

    Die Zeile mit dem Logfile dient dazu, die Daten in ein Logfile zu Kontrolle zu schreiben. Dabei entsteht folgende Ausgabe:

    Durchlauf: 0, First: chrische, Second: 0
    Durchlauf: 1, First: unbekannt, Second: 0
    Durchlauf: 2, First: unbekannt, Second: 0
    Durchlauf: 3, First: unbekannt, Second: 0
    Durchlauf: 4, First: unbekannt, Second: 1440

    Das ist auch genau das, was auch in der Datei steht. Also alles in Ordnung.
    Nun versuche ich diese Daten später wieder aus der Liste zu lesen:

    for(itList = m_List.begin(); itList != m_List.end(); ++itList)
    		Logfile->fTextOut("First: %s, Second: %d<br>",(*itList)->first.c_str(),(*itList)->second);
    

    Auch hier schreibe ich die Daten wieder in ein Logfile, um diese zu kontrollieren. Dabei erscheint folgende Ausgabe:

    First: unbekannt, Second: 1440
    First: unbekannt, Second: 1440
    First: unbekannt, Second: 1440
    First: unbekannt, Second: 1440
    First: unbekannt, Second: 1440

    Das entspricht leider nicht dem, was ich erwartet habe. Ich komme einfach darauf, wo ich einen Fehler gemacht habe.
    Vielleicht sehe eure Adleraugen ja mehr als meine.
    Falls es noch Fragen gibt, einfach stellen.

    Danke für die Hilfe.

    chrische



  • Kann es sein, dass du in deiner Liste jeweils einen Zeiger auf TempPair speicherst? Und da es nur ein TempPair gibt, zeigen alle Listenelemente auf die letzte Inkarnation dieser Variable.



  • Hallo

    Auf genau so eine Anregung hatte ich gewartet. Danke für die Hilfe.

    chrische


Anmelden zum Antworten