std::map Absturz bei .erase()
-
Hallo!
Ich habe folgende Schleife, in der fettmarkierten Zeile stürzt das Programm mit einer unbehandelten Ausnahme ab:
[cpp]
for(map<string, Socket*>::iterator begin = m_clientSocketMap.begin(); begin != m_clientSocketMap.end(); ++begin)
{
pair<string, Socket*> p = *begin;[...]
delete p.second;
m_clientSocketMap.erase(begin); // Absturz
[...]
}
[/cpp]Der Fehler soll in dieser Datei an folgender Stelle liegen:
**
iosfwd:
static void __cdecl assign(_Elem& _Left, const _Elem& _Right)
{ // assign an element
_Left = _Right;
}
**Aber das bringt mich nicht weiter
? Auch wenn ich statt des Iterators den Key angebe stürzt es an der selben Stelle ab
-
begin ist nach dem erase ungültig. das ++begin in der schleife (und auch alles, was im nächsten schleifendurchgang passiert) also undefiniert. es müsste also schon
for(map<string, Socket*>::iterator begin = m_clientSocketMap.begin(); begin != m_clientSocketMap.end(); ) { pair<string, Socket*> p = *begin; [...] delete p.second; m_clientSocketMap.erase(begin++); // Absturz [...] }
sein.