nDiki : 2011年02月21日

2011年2月21日 (月)

Visual C++ Win32 コンソールアプリケーションへのメモリリーク検出の埋め込み

Visual C++ 2005 で開発のプログラムがどうもメモリリークしているっぽい。 メモリリーク検出を仕込む方法のメモ

stdafx.h

デバッグバージョンのヒープ割り当て関数を使うようにするマクロ定義と crtdbg.h のインクルードをする。 メモリリーク情報ダンプの際にレポートにファイル名と行番号が出るように new を書き換えるマクロを定義する。

 // デバッグバージョンのヒープ割り当て関数を使うようにする。
 #ifdef _DEBUG
 #define _CRTDBG_MAP_ALLOC
 #include <stdlib.h>
 #include <crtdbg.h>
 #endif

 // _CRTDBG_MAP_ALLOC に関係なくプリコンパイルしたいもの。
 // かつ new を書き換えるとコンパイルが通らなくなるヘッダファイル群。
 #include <string>

 #ifdef _DEBUG
 // プリコンパイルするほどではないけど、
 // new を書き換えるとコンパイルが通らなくなるヘッダファイル群。
 // 例えば。
 #include <map>

 #define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
 #endif

 // プリコンパイルしていもの。
 #include <myproj/utility.h>

main 関数

終了時にメモリリーク情報をダンプさせるようにする。 また、コンソールアプリケーションの標準エラー出力にレポートが出力されるように設定する。

 int main(int argc, char* argv[]) {
   // 終了時にメモリリーク情報をダンプさせる。
   _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);


   // レポートをファイルに書き出させる。
   _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE);
   _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
   _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE);

   // レポートを標準エラー出力に出力させる。
   _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR);
   _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
   _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);

   // 処理を開始。
   ...
 }
スポンサード リンク

今日のさえずり: 「玄関開けたら2分でごはん」って韻が素晴らしいんだな

サトウのごはん コシヒカリ 200g×20個

2011年02月21日

  • 12:07 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/fkgq1o
  • 12:28 RT @weboo: AKBのカレンダーを剥がされただけで、職場がこんなに殺風景になるとは…
  • 12:38 先週金曜日に外部サイト連携を設定してmixiチェックに流せるようにしてから、はてなブックマークまたぼちぼち使ってる。 http://bit.ly/eEMIud
  • 14:03 メモリリークの香りがプンプンする。
  • 14:26 CryptoAPI の件、CryptAcquireContext が「署名が無効です。」エラーを返してた。これから調査する。
  • 14:31 0x80090006L、NTE_BAD_SIGNATURE。
  • 16:27 結局 CryptoAPI はやめて、別の MD5 実装を使うことにした。
  • 16:37 マージしないで git branch -D しちゃうとそのコミットが gitk で表示されなくなるので見つけにくくなるな。とりあえず墓標タグ打っておいた。 #Git
  • 17:30 缶コーヒー 100円。
  • 19:36 ついに対応! RT @mixi_PR: Android端末のスマートフォンからも新規ユーザー登録が可能になりました!   http://mixi.co.jp/press/2011/0221/4338
  • 19:48 mixi Developer登録の携帯メールアドレス変更のドメイン候補には gmail.com とか追加されてないな。
  • 19:52 Android からの mixi 新規登録、やはりキャリアのメールアドレスが必要。
  • 19:52 iモード端末が不要になったのはいいね。
  • 20:20 「玄関開けたら2分でごはん」って韻が素晴らしいんだな。
  • 22:13 「『パケ・ホーダイ ダブル』ご契約者の場合、『パケ・ホーダイ フラット』はお申込みいただいた翌月からの適用となります。」と書いてあるな。自分の場合、3月15日以降に申し込んで4月から適用という流れだな。
  • 23:34 SL4A (sl4a_r3.apk) インストール。 #Android
  • 23:42 SL4A 起動して [View] - [Interpreters] して [Add] - [Perl 5.10.1] して perl_for_android_r1.apk をダウンロードしてインストール。#Android
  • 23:43 Perl for Android 起動して [Install] ボタン押して perl_r9.zip ダウンロード中。1647952bytes #Android
  • 23:46 perl_extras_r7.zip も自動的にダウンロードされた。 #Android
  • 23:51 SL4A 起動したらサンプル Perl スクリプトが追加されてた。 http://flic.kr/p/9jWt6E
  • 24:02 ATOK トライアル試用期間がもうすぐ終わると通知に出たけれど、製品版はいつ出るのかな? #Android
  • 24:54 QuickSSHd インストールして PC から XperiaSSH で入れるようにした。 #Android
  • 24:57Emacs + TRAMP で直接ファイルを編集しようと思ったんだけれど失敗。/bin/sh が無いからか。 #Android
[ 2月21日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.049512s / load averages: 0.32, 0.26, 0.25
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker