ロゴ メインコンテンツへ
RSSフィード
「ソフトウェア開発」に関連する記事一覧

Visual C++ メモリリークを検出する方法

2011/02/11
(この記事の文字数: 252)

今更知ったのですが、Visual Studioではcrtdbg.hをインクルードして

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

をmainが始まったところに書いておくとメモリの解放し忘れを検知してデバッグ出力で知らせてくれるようです。これでほとんどのメモリリークを見つけられるようです。

今まで頑張ってコードと見詰め合っていた自分がアホみたいです。

以下にサンプルプログラムを示します。


#include <crtdbg.h>
class TestClass
{
public:
    TestClass(){ m_data=new int[10]; }
    ~TestClass(){}
private:
    int *m_data;
};

void Test1()
{
   int *data = new int[3];
}
void Test2()
{
   TestClass data;
}

int main()
{
   _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
   Test1();
   Test2();
   return 0;
}

デバッグ出力の最後の方には次のように表示されます。


Detected memory leaks!
Dumping objects ->
{63} normal block at 0x008E4BC0, 40 bytes long.
 Data: <                > CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD 
{62} normal block at 0x008E4B78, 12 bytes long.
 Data: <            > CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.


  このエントリーをはてなブックマークに追加  

<<「ソフトウェア開発」の記事一覧に戻る

<<「ソフトウェア開発」の次の記事
「ソフトウェア開発」の前の記事 >>

コメント(0 件)



コンテンツロード: 0.0084 sec
Copyright(C)2006-2024 puarts All Rights Reserved