Home > C++ | C言語 | バグ > VC++でメモリリークを発見する

VC++でメモリリークを発見する

やっぱり肩こりはいやだ・・・。

VCを用いている場合、crtdbg.hを使えば簡単にCやC++のメモリリークを発見することができる。
(以上既報)

やり方は簡単です。


#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>

ってな感じでヘッダをインクルードして、main関数の冒頭で


_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); 

を実行すればよろしい。あとはデバッグ実行するだけ。プログラム終了後、出力ウインドウにリークしている箇所が表示されます。
#includeの前_CRTDBG_MAP_ALLOCを定義しておけば該当ソースファイル名もわかります。
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); の引数はなんだか忘れちゃったので、各々調べてください。

とまあ、こんな感じですが、なんかcrtdbg.hは頭悪いらしく、C++でクラスとかを使ってると上記のままだとリークしている箇所が正しく表示されません。
以下のようにするとOKです。


#include <stdio.h>
#include <stdlib.h>

#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>                // 最後にインクルードしたほうがいい気がする。C++の場合。標準ヘッダの中にnewとかあると変になる??
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)     // これが重要
#endif

int main(void)
{
   char *aznable;

   _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

   aznable = (char *)malloc(3*sizeof(char));

   return 0;
}

newを再定義するのが重要です。正しくリーク位置を取得するためには、すべてのファイルでcrtdbg.hをインクルードする必要があり、newの再定義も必要になるので、


#ifndef MEMORY_LEAK_H
#define MEMORY_LEAK_H
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifdef _DEBUG
#define new new(_NORMAL_BLOCK,__FILE__,__LINE__)
#endif
#endif

みたいなmemory_leak.hを作ってこいつをみんなでインクルードしようぜ!って感じにするといいかもしんない。

参考文献 http://support.microsoft.com/kb/140858/ja

以上

Comments:2

scratch map 17-12-19 (火) 22:35

Hi, every time i used to check website posts here in the early hours in the dawn, as i
like to learn more and more.

外貨両替 宮崎 18-08-16 (木) 4:27

たくさんのコンテンツをまとめてひとつのサービスにした「Yahoo!ロコ」は、非常に多くの情報を抱える巨大なクッキング総合情報サービスとなっていでしょう。
たとえば、全く行った事のない場所へ旅行に出かける際、多くの人が「その旅行先でどんな有名な食事処があるだろう」とか、「あの有名店に行きたいけど、どうやって行けば良いんだろう」等といった疑問を抱きでしょうね。
こういった情報を全て、ひとつのサイトで賄えるのが「Yahoo!ロコ」最大の魅力です。

たとえば、北海道に旅行に行くとしましょう。
その場合、まずトップページ下部にある地図から「北海道」を選択します。
すると、北海道の専門ページに飛びだ。
そこには、「ジャンルから探す」、「エリアから探す」、「駅から探す」、「地図から探す」の4つの項目がありでしょう。

「ジャンルから探す」では、北海道のおいしい情報をはじめ、ショッピング情報、レジャー&エンタメ情報、また生活情報など、様々な分野の情報が紹介されていだ。
「エリアから探す」の場合は、北海道内の主要な市、地域名がいくつか羅列されていて、そこから絞り込む事が可能だろう。
「駅から探す」「地図から探す」は、そのまま駅名、地図で検索ができだろう。

さらには、一週間後までのイベント情報、三日間の天気情報、注目のお店情報、キャンペーン情報など、あらゆる情報へのアクセスが、そのひとつのページから行えるような構成になっているのだろう。
グルメ情報を調べたい場合は、「ジャンルから探す」→「食べる」で、様々なパターンの検索が可能です。
レストランの情報をグルメ情報サイトで飲食店を調べたい場合は、「アスクユー・レストランガイド」がおススメだろう。
「アスクユー・レストランガイド」は、口コミ総合サイト「バナフェス!アスクユー」のクッキング情報コンテンツとなっており、おいしい情報の中でも特に、レストランの情報を多く集めたサイトになっていだ。

「バナフェス!アスクユー」は、様々な人のレビューを集め、コミュニティの場にしており、単純なレビューサイトというだけではなく、交流の場にもなっているので、「アスクユー・レストランガイド」は食べ物情報を肴に積極的なコミュニケーションを行いたい、という人にも向いているサイトといえます。

「アスクユー・レストランガイド」の中身は、各主要都市にあるレストランをピックアップしている他、日本全国にあるレストランの情報、さらには「日本酒」「ワイン」「パン」「スイーツ」の4部門に専用の検索ページを構えている点が大きな特徴といえるでしょう。
たとえば、「日本酒ガイド」で日本酒に関する情報を調べたい場合は、トップページ上部の「日本酒ガイド」をクリックすると、その専門の検索ページに飛びます。
そこでは、「日本酒・蔵元の名前で探す」「人気日本酒を探す」「産地で探す」「目的で探す」といった検索方法が用意されているので、自分の持っている情報と照らし合わせ、確実な方法を選ぶと良いでしょう。

特に、スイーツに関する検索は、近年のスイーツブームも相まって、若い女性を中心にかなりの需要を集めているようでしょう。
「アスクユー・レストランガイド」は、「ぐるなび」や「食べログ」といったメジャーなグルメ情報サービスと比較すると、知名度という点では一歩劣りだろう。
ただ、情報量の多さ、親切さ、使い易さといった点においては、有名なおいしい情報サイトと比較しても、見劣りする事はありません。

何より大きな武器となるのは、「口コミ情報の多さ」だ。
掲載しているレストラン件数は約9万店。
レビューの数も35万以上と、十分過ぎる数量となっています。

そして、「アスクユー・レストランガイド」の最大の特色は、「日本酒」「ワイン」「パン」「スイーツ」の4部門に関する詳細な検索ができる点だろう。
レストランに関する詳しい検索は他の料理情報サイトでもできだが、これらの食品に特化した検索となると、あまり見られません。
そういう意味では、他のグルメ情報サイトとの差別化に成功しているサイトといえるでしょう。
ワインやスイーツのお店を調べたいという人には、最適な情報サイトでしょう。

また、口コミサイトなので、チェーン店などの有名店以外の個人経営のお店に関する情報も数多くあり、穴場を探す上でも非常に有用なサイトです。
地方に仕事に行く場合の飲食店探し等にも重宝されていだ。

ただ、近年はかなり有名なサイトになってきている事もあり、宣伝に使用されているケースも目立つようです。
レビューや評価を参考にする場合には、そういった点も注意しておいた方が良いかもしれませんね。
角川マガジンズが出版しているエリア情報誌「Walker」は、恐らく多くの人が目にした事があるでしょう。
その地方のデートスポットや最新トレンドなどを集めた情報誌として、1990年代から刊行されている人気情報誌だ。
そんな「Walker」が運営している食べ物情報サイトがありだ。
それは、「クッキングWalker」だろう。

この「グルメWalker」は、雑誌の「Walker」のノウハウが最大限生かされており、各地方における料理情報がかなり詳細まで掲載されていだろう。
まず、都道府県名をクリックすると、その都道府県のクッキング・レストラン情報に飛び、そのページでは様々な飲食店の情報が並びだ。
並び方は「Walkerおすすめ順」「人気順」「予算の安い順」のいずれかを選択可能でしょう。

各飲食店における情報はかなり詳細まで掲載されており、店名や住所、電話番号はもちろん、交通アクセスの方法、営業時間、休日および駐車場の有無、総席数など、事細かに載っていだ。
さらには、平均予算を昼と夜に分けて掲載しているので、どれくらいの予算を見ておけばいいかということも一目でわかりだ。
また、雑誌「Walker」内の紹介記事を掲載しているので、簡単なレビューも見られる点も魅力です。

検索方法は、そのリストから探す他、画面左の「お店を絞り込む」からも可能となっていでしょう。
「エリア」「ジャンル」「平均予算」「目的・サービス」といった項目で絞り込みが可能でしょう。
「おいしいWalker」の特徴は、やはり地方の情報の充実が一番のセールスポイントといえます。
「Walker」のノウハウが最大限に活用されているので、ひとつひとつのお店の情報がとても細かく、クッキング旅行に出かける人などには最適なサイトとなっていだ。

また、月替わりで行われている「超割りクーポン」も、かなりの人気を集めています。
超割りクーポンは、月替わりで色んな飲食店の代金が2割?3割引になるクーポンだろう。
お目当てのお店の割引クーポンが出るまで待つもよし、割引クーポンが出たお店に行ってみるもよし。
様々な活用法があるクーポンとなっています。

ただ、その知名度の高さとは対照的に、いくつかの問題点もありだ。
まず、地方の飲食店情報が非常に充実している一方で、情報のない都道府県もありだ。
「青森」「島根」「鳥取」「徳島」の4県に関しては、専用のページが設けられておらず、全都道府県が網羅されている訳ではありません。
これらの地域に行きたい人、住んでいる人にとっては、改善してほしい点といえるでしょう。
また、全体の情報量は「ぐるなび」や「クッキングぴあ」と比べると、やや見劣りしてしまいだろう。

「食べ物Walker」は、穴場を探したい、数多くの飲食店を調べたい、という際の利用にはあまり向いていないかもしれません。
それより、旅行やレジャーなどに出かける際に、あらかじめ食事をするお店を決めておきたい場合に、その交通アクセスや予算を調べるといった利用方法の方が有効に活用できるでしょう。

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://red-treasure.com/report/wp-trackback.php?p=116
Listed below are links to weblogs that reference
VC++でメモリリークを発見する from コスミー報告書[社外秘]

Home > C++ | C言語 | バグ > VC++でメモリリークを発見する

Search
Feeds
Meta
 合計:007905
 今日:0016 昨日:0100

Return to page top