Freigeben von Speicher in einer anderen DLL

Habe ich eine EXE-Datei mit einer DLL-Datei, die mit einer anderen DLL-Datei. Diese situation hat sich ergeben:

DLL-Datei In 1:

class abc
{
    static bool FindSubFolders(const std::string & sFolderToCheck, 
                               std::vector< std::string > & vecSubFoldersFound);
}

In der DLL-Datei 2:

void aFunction()
{
    std::vector<std::string> folders;
    std::string sLocation;
    ...
    abc::FindSubFolders(sLocation, folders)
}

Im release-Modus funktioniert alles einwandfrei. Aber im debug-Modus, ich komme mit ein Assertionsfehler in der Destruktor einer der std::strings im Ordner vector (beim Ordner geht out of scope am Ende aFunction):

dbgheap.c : line 1274

/*
 * If this ASSERT fails, a bad pointer has been passed in. It may be
 * totally bogus, or it may have been allocated from another heap.
 * The pointer MUST come from the 'local' heap.
 */
_ASSERTE(_CrtIsValidHeapPointer(pUserData));

Ich nehme an, dies ist, da der Speicher reserviert wurde auf DLL-Datei, 1 Haufen, aber freigegeben wird, die in DLL-Datei 2.

Den Kommentar in dbgheap.c scheint ziemlich hartnäckig, dass das ein problem ist.

Warum ist das so ein problem, wenn es scheint gut zu funktionieren, wenn ich diese einfach ignorieren? Gibt es eine nicht-assertion-in Ermangelung einer Möglichkeit, dies zu tun?

  • DONT . IGNORIEREN . BEHAUPTUNGEN
  • NICHT. IGNORIEREN. ES. DAS IST. WARUM. I. BAT. =P
  • Möchte nur wissen, warum es ein problem.
InformationsquelleAutor Smashery | 2009-10-28
Schreibe einen Kommentar