map iterator Problem



  • Hallo zusammen,

    ich habe (mal wieder) ein Problem mit einem Iterator. Es geht um folgende Funktion:

    void NavDisplay::RemoveAirportsToDraw(std::wstring ICAO)
    {
    	map<wstring, ToDrawAirportData>::iterator iter = ToDrawAirports.find(ICAO);
    	if(iter != ToDrawAirports.end())
    	{
    		ToDrawAirports.erase(iter);
    	}
    }
    

    Beim Debuggen bekomme ich aber (irgendwann) folgende Fehlermeldung:

    Expression:map/set iterator not incrementable
    

    Bin fuer jeden Hinweis dankbar.

    Viele Gruesse
    Sven



  • Ich sehe im Quelltext nichts, wo ein Iterator inkrementiert wird. Der Fehler liegt woanders.



  • LordJaxom_lg schrieb:

    Ich sehe im Quelltext nichts, wo ein Iterator inkrementiert wird. Der Fehler liegt woanders.

    Ich bin eben nochmal dem Problem nachgegangen. Wie es scheint liegt das Problem woanders.

    Es gibt an anderer Stelle noch einen Iterator fuer die map:

    for(iter; iter != ToDrawAirports.end(); iter++)
    {
        blablablubb;
    }
    

    Genau hier duerfte das Problem liegen. "NavDisplay::RemoveAirportsToDraw(std::wstring ICAO)" wird naemlich von einem anderen Thread im gleichen Prozess aufgerufen. Meine Vermutung liegt jetzt darin das in

    for(iter; iter != ToDrawAirports.end(); iter++)
    

    "iter" inkrementiert werden soll obwohl inzwischen durch "NavDisplay::RemoveAirportsToDraw(std::wstring ICAO)" die map schon so verkleinert wurde das "iter++" praktisch hinter "ToDrawAirports.end()" landen wuerde.

    Scheint also ein Thread-Problemzu sein. Kann mir vielleicht dazu jemand einen Hinweis geben wie ich das loesen koennte?



  • Du musst die Zugriffe synchonisieren. Details dazu findest du in der Dokumentation deiner Thread-API.



  • MFK schrieb:

    Du musst die Zugriffe synchonisieren. Details dazu findest du in der Dokumentation deiner Thread-API.

    Danke fuer den Hinweis. In dem Fall ist es die WinAPI, konnte das Problem mit "CriticalSection" loesen. Jetzt funktioniert es wie gewuenscht.

    Viele Gruesse


Log in to reply