Liberar memoria asignada en un DLL diferente

Tengo un archivo EXE utilizando un archivo DLL que está utilizando otro archivo DLL. Esta situación ha surgido:

En el archivo DLL 1:

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

En el archivo DLL 2:

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

En el modo de lanzamiento, todo funciona bien. Pero en el modo de depuración, se me ocurre una falla de afirmación en el destructor de uno de losstd::strings en el vector de carpetas (cuando las carpetas están fuera del alcance al final de 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));

Supongo que esto se debe a que la memoria se ha asignado en el montón del archivo DLL 1, pero se está liberando en el archivo DLL 2.

El comentario endbgheap.c Parece bastante insistente que esto es un problema.

¿Por qué esto es un problema así, cuando parece funcionar bien si simplemente lo ignoro? ¿Hay alguna manera de no hacer una afirmación?

Respuestas a la pregunta(4)

Su respuesta a la pregunta