-
Notifications
You must be signed in to change notification settings - Fork 0
MS_VCPlusPlusMemoryLeak
nishi_74322014 edited this page Aug 3, 2026
·
1 revision
- 戻る(メモリ・リーク、VC++(
MS_VCPlusPlus.md))- VC++のメモリ・リーク
- COMのメモリ・リーク
- WWWブラウザのメモリ・リーク
VC++のメモリ・リークについて。
補足: 元 Wiki は概要と参考リンクのみ。以下は補足として追記した内容。
| 原因 | 内容 |
|---|---|
new / delete、malloc / free の不一致 |
確保と解放の対応漏れ。new[] には delete[] を使う。 |
| 例外による解放のスキップ | 途中で例外が飛び、delete に到達しない。 |
| 循環参照 |
std::shared_ptr 同士が参照し合い、参照カウントが 0 にならない。 |
| ハンドル リーク |
CloseHandle / ReleaseDC などの解放漏れ。メモリ以外のリソース リーク。 |
| COM の参照カウント |
Release 漏れ。 |
-
RAII を徹底する(
std::unique_ptr/std::shared_ptr、CComPtrなど)。
生ポインタでの所有権管理をやめれば、上記の多くは構造的に起きなくなる。 - 循環参照になる側は
std::weak_ptrにする。
-
CRT デバッグ ヒープ
デバッグ ビルドで_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF)を設定すると、
プロセス終了時に未解放ブロックが出力ウィンドウに表示される。
_CrtSetBreakAlloc(<割り当て番号>)でその確保位置に止められる。 - Visual Studio の診断ツール(メモリ使用量のスナップショット比較)
-
本番環境ではUMDH、WinDbgの
!heap系コマンド
(事前にグローバルフラグでページ ヒープ/スタックトレース DB を有効化)。
Tags: 障害対応, 性能, デバッグ
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。