У меня есть EXE-файл с использованием DLL-файла, который использует другой 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
кажется довольно настойчивым, что это проблема.
Почему эта проблема возникает, когда она работает нормально, если я просто игнорирую ее? Есть ли способ, который не соответствует утверждению?
DONT. IGNORE. УКАЗАНИЯ – KeatsPeeks
НЕ. ИГНОРИРОВАНИЕ. ЭТО. ЭТО. ЗАЧЕМ. Я СПРОСИЛ. = P – Smashery
Просто хочу знать * почему * это проблема. – Smashery