Wenn ich mein Programm in Visual Studio 2003 kompiliere, verhält sich mein Programm gut und gut. aber wenn ich dasselbe in 2010 mache, dann bekomme ich beim Schließen der Anwendung einen Fehler wie
%Vor%und wenn ich drücke, um dies zu ignorieren, bekomme ich
%Vor%Hat irgendjemand eine Idee, was hier vor sich geht? Ich werde mich sehr für irgendwelche Vorschläge von irgendjemandem bedanken. Tonnenweise Dank und herzliche Wünsche.
Wenn this
das einzige Element in der Liste ist, werden Sie das Ende der Liste überschreiten.
Nachdem Sie this
aus der Liste entfernt haben, setzen Sie it = m_DriverList.begin();
zurück. Das ist in Ordnung. Dann wird der Schleifenausdruck ausgewertet (der i++
von der for
-Anweisung), was bewirkt, dass it
über das Ende des Bereichs hinaus vorgerückt wird.
Das Vorrücken eines Iterators nach dem Ende des Containers führt zu undefiniertem Verhalten des Programms. Neuere Versionen von Visual C ++ erkennen hilfreich viele häufig auftretende Iteratorfehler in Debug-Builds Ihres Programms und lösen Assertionen aus, die Ihnen helfen, sie zu lösen.
Sie können das Problem lösen, indem Sie den Schleifenausdruck entfernen und in eine else
-Anweisung verschieben:
Allerdings ist ein Neustart der Iteration jedes Mal, wenn Sie ein Element entfernen, ziemlich verschwenderisch. Verwenden Sie stattdessen den Iterator, der vom Aufruf von erase
:
Tags und Links c++ visual-c++