У меня есть 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
в векторе папок (когда папки выходят за пределы области действия в конце 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));
Я предполагаю, что это связано с тем, что память была выделена на кучу DLL файла 1, но освобождается в DLL файле 2.
Комментарий в dbgheap.c
кажется довольно настойчивым, что это проблема.
Почему эта проблема возникает, когда она работает нормально, если я просто игнорирую ее? Есть ли способ, который не соответствует утверждению?