Posts by maazl

    Ich denke, ich kann die Sache aufklären. Ich hatte heute denselben Fehler.


    Der Code in conflictcheck.cpp hat definitiv undefiniertes Verhalten. Und erase(it) und erase(*it) sind auch nicht ganz äquivalent. Letzteres sucht unnötigerweise zuerst nach einem wertgleichen Element.


    Der Einwand von seahawk1986 ist korrekt. Nach erase darf nicht mehr auf existierende Iteratoren zugegriffen werden. Der Fix beseitigt das Problem hier reproduzierbar.

    Allerdings ist er nur die halbe Wahrheit. Der ganze Code steckt auf den ersten Blick voller Fehler mit diesem Muster. Die meisten werden wohl nur seltener durchlaufen. Und die Standardbibliothek garantiert ja nicht, dass die Iteratoren immer ungültig werden. Aber eine Optimierung der stdlibc++ ist hinreichend, um das Verhalten zu ändern. Das wiederum bedeutet, je nach System-Unterbau ist das Verhalten unterschiedlich, was zu den Symptomen passt.


    Ich werde mir den Code notgedrungen mal zur Brust nehmen. Aber nicht mehr heute Abend.