別のDLLファイルを使用しているDLLファイルを使用しているEXEファイルがあります。このような状況が生じている:異なるDLLに割り当てられたメモリを解放する
をDLLファイル1では:DLLファイル2では
class abc
{
static bool FindSubFolders(const std::string & sFolderToCheck,
std::vector<std::string> & vecSubFoldersFound);
}
:リリースモードで
void aFunction()
{
std::vector<std::string> folders;
std::string sLocation;
...
abc::FindSubFolders(sLocation, folders)
}
、すべてが正常に動作します。しかし、デバッグモードでは、私は、フォルダベクトル(フォルダがaFunctionの最後でスコープ外となる)で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。無視する。アサーション – KeatsPeeks
NOT。無視する。それ。そうだ。なぜ。私は尋ねた。 = P – Smashery
ちょうど知りたい*理由*それは問題です。 – Smashery