問題タブ [crtdbg.h]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CrtDbg メモリ チェックで、dll のアンロード時にスタック オーバーフローがスローされる
で動的ライブラリをロードしLoadLibrary
て解放するプログラムがありますFreeLibrary
。_CrtDumpMemoryLeaks()
これまでのところ、実行された on でメモリリークをチェックしましたDLL_PROCESS_DETACH
。1 つの必須の欠陥があります - グローバルを適切にチェックしません。その理由は、DLL_PROCESS_DETACH
シグナルの後にグローバルが破棄されるためです。この問題を解決するために、フラグ_CrtDumpMemoryLeaks()
を設定することに置き換えました。_CRTDBG_LEAK_CHECK_DF
しかし、この変更の後、内部の crtdbg 関数は無限再帰に入り、stack overflow
例外で終了します。
いくつかの関数の内部を調べたところ、 ( )で終わる内部のreturn のように見えinternal_getptd_noexit()
ます。返される最も内側の関数はinsideです。これが無限ループの理由に関連しているかどうかはわかりません-おそらく役立つでしょう。nullptr
__acrt_getptd()
abort()
per_thread_data.cpp
nullptr
__acrt_FlsSetValue(__acrt_flsindex, reentrancy_sentinel)
internal_get_ptd_head()
このような crtdbg の動作の理由は何でしょうか?