別の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
は、これが問題であるとかなり主張しているようです。
無視すればうまくいくように見えるのに、なぜこれがこのような問題なのですか?これを行うためのアサーションに失敗しない方法はありますか?