У меня есть файл 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
кажется довольно настойчивым, что это проблема.
Почему это такая проблема, когда кажется, что она работает нормально, если я просто игнорирую это? Есть ли способ сделать это без ошибок?