問題タブ [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.

0 投票する
0 に答える
32 参照

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.cppnullptr__acrt_FlsSetValue(__acrt_flsindex, reentrancy_sentinel)internal_get_ptd_head()

このような crtdbg の動作の理由は何でしょうか?