map / set Iterator nicht incrementablemap / set Iterator nicht inkrementierbar

8
%Vor%

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.

    
user1107855 25.01.2012, 03:31
quelle

2 Antworten

12

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:

%Vor%

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 :

zurückgegeben wird %Vor%     
James McNellis 25.01.2012 03:34
quelle
7

Das korrekte Lösch-Idiom für assoziative Container lautet wie folgt:

%Vor%     
Kerrek SB 25.01.2012 04:17
quelle

Tags und Links