Iterator auf std::list liefert NULL



  • Hallo,

    ich arbeite hier gerade an einem Stück Programm, dass mit einem Iterator durch eine Liste von Objekten (wohlgemerkt nicht von Zeigern auf Objekte) läuft. Ich verwende dazu die folgende Konstruktion:

    list<... >::iterator i;
     for (i=....begin(); i!=....end(); ++i)
    

    Nun erhalte plötzlich manchmal für i den Wert NULL. Wie kann das sein? Ich dachte, so ein Iterator läuft genau einmal vom Anfang der Liste bis zu ihrem Ende durch?

    Für Ideen und Hinweise bin ich sehr dankbar,
    M. Rentzsch



  • Woran erkennst du dass der Wert von i NULL ist?



  • Ponto schrieb:

    Woran erkennst du dass der Wert von i NULL ist?

    An einer einfachen Abfrage:

    if (i == NULL) { ... }
    

    Gruß,
    M. Rentzsch



  • Dann wäre ein minimales lauffähiges Testprogramm notwendig.



  • Ponto schrieb:

    Dann wäre ein minimales lauffähiges Testprogramm notwendig.

    Hmm, das ist nicht so ohne weiteres aus den bisherigen Sourcen machbar. Aber wenn das kein bekanntes Problem oder ein Denkfehler meinerseits ist, dann muss ich wohl sowieso weiter nach einem Bug in meinen Funktionen suchen.

    Trotzdem danke!
    M. Rentzsch



  • if (i == NULL)
    

    das darfst du eh nicht machen. es ist nicht garantiert dass der iterator ein zeiger ist.
    aber wenn du willst, kannst du in dem if noch testen, ob i==end() ist, denn es kann natürlich sein, dass NULL der endwert für listen in deiner stl implementation ist.

    //edit kann der iterator in einer list überhaupt ein zeiger sein?
    gibts da vielleicht einen komischen op== der irgendeine komische konvertierung vornimmt?

    //edit2
    hat das objekt in deiner liste den op & überladen? denn nach sgi.com gibt es noch diese regel:

    x == y if and only if &*x == &*y

    (x und y sind iteratoren)


Anmelden zum Antworten