Fehler beim Entladen einer DLL



  • Hallo!

    Ich habe eine DLL geschrieben, in der unter anderem folgender Code steht:

    typedef std::map<HANDLE, wchar_t*> THandleList;
    THandleList HandleList;
    
    int WINAPI DllEntryPoint(HINSTANCE, unsigned long reason, void*)
    {
        if(reason==DLL_PROCESS_DETACH)
        {
            THandleList::iterator Handle=HandleList.begin();
            while(Handle!=HandleList.end())
            {
                delete [] (*Handle).second;
                Handle++;
            }
        }
    }
    

    Die DLL wird von mehreren Prozessen verwendet.

    HandleList werden über exportierte Funktionen neue Einträge hinzugefügt. Für Handle->second wird dabei, mittels new wchar_t[...], dynamisch Speicher angefordert.

    Nun wollte ich sicherstellen, dass dieser Speicher beim entladen der DLL wieder freigegeben wird.
    Nur verursacht obiger Code beim Entladen der DLL (beim Zugriff auf *(Handle).second) "einen Fehler" (mehr möchte Windows mir dazu nicht verraten) unter Windows ME. Unter WinXP jedoch bekomme ich keine Fehlermeldung.

    Wäre nett, wenn jemand mir helfen könnte den Fehler zu finden.



  • Ich habe die Definition von THandleList geändert in:

    typedef std::map<HANDLE, std::wstring> THandleList;
    

    Die Destruktoren der wstrings werden doch beim Entladen der Dll automatisch aufgerufen und somit der gesamte belegte Speicherplatz wieder freigegeben?
    Oder mus man da noch etwas beachten?


Anmelden zum Antworten