Освобождение памяти, выделенной в другой DLL

У меня есть файл EXE, используя файл DLL, который использует другой файл DLL. Такая ситуация возникла:

В файле DLL 1:

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

В DLL-файле 2:

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

В режиме релиза все работает нормально. Но в режиме отладки у меня возникает ошибка утверждения в деструкторе одного изstd::strings в векторе папок (когда папки выходят из области видимости в конце функции):

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));

Я предполагаю, что это потому, что память была выделена в куче файла DLL 1, но освобождается в файле DLL 2.

Комментарий вdbgheap.c кажется довольно настойчивым, что это проблема.

Почему это такая проблема, когда кажется, что все работает нормально, если я просто игнорирую это? Есть ли способ сделать это без ошибок?

Ответы на вопрос(4)

Ваш ответ на вопрос