メモリリーク対策
メモリリークを検出するには_CrtDumpMemoryLeaksなどのCRTで用意された関数を用いる。
リークチェックに使う主な関数は以下
- _CrtSetDbgFlag: ↓の関数を使用するための設定を行う
- _CrtDumpMemoryLeaks: メモリーリークとして検出されたメモリブロックをダンプする
- _CrtMemCheckpoint: ヒープのメモリ状態のスナップショットを生成する
- _CrtMemDumpAllObjectsSince: 任意の状態を始点とし、そこからのすべてのオブジェクトをダンプする
- _CrtMemDumpStatistics: 任意のメモリ状態のスナップショットを人間が読める形式でダンプする
他にもリークチェックに使えそうな関数がある。
- _CrtSetAllocHook: mallocの代わりに独自のメモリ割り当てを定義する
- _CrtSetBreakAlloc: 任意のメモリブロックに対してmalloc直後にブレークを発生させるように設定する
上記の関数群はCRTのmalloc系関数によるメモリ割り当てを行っている場合のリークチェックに使用可能。
独自にHeapAllocやVirtualAlloc,GlobalAllocなどを行っている場合は適用できない。
また、C++のnewはVC6.0,VS2003では内部でmallocを使用しているため上記の手法を適用できる。
VS2005ではどうなっているかは調べていない。