我有一个使用另一个 DLL 文件的 DLL 文件的 EXE 文件。出现了这种情况:
在 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
似乎非常坚持认为这是一个问题。
如果我只是忽略它似乎可以正常工作,为什么会出现这样的问题?有没有一种非断言失败的方式来做到这一点?