<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DigiTechLog Dot Com &#187; C/C++</title>
	<atom:link href="http://digitechlog.com/category/programming/c-and-cpp/feed" rel="self" type="application/rss+xml" />
	<link>http://digitechlog.com</link>
	<description>Adobe AIR、Flex、Flash、Java</description>
	<lastBuildDate>Tue, 08 Nov 2011 12:46:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>_CrtSetBreakAlloc (CRT)でCPPのメモリリークを検出する</title>
		<link>http://digitechlog.com/2009/01/14/how-to-use-_crtsetbreakalloc-crt-to-check-memory-leak-in-cpp.html</link>
		<comments>http://digitechlog.com/2009/01/14/how-to-use-_crtsetbreakalloc-crt-to-check-memory-leak-in-cpp.html#comments</comments>
		<pubDate>Wed, 14 Jan 2009 08:40:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[CPP]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[_CrtSetBreakAlloc]]></category>
		<category><![CDATA[_DEBUG]]></category>

		<guid isPermaLink="false">http://digitechlog.com/2009/01/14/how-to-use-_crtsetbreakalloc-crt-to-check-memory-leak-in-cpp.html</guid>
		<description><![CDATA[最近VCを利用してCPPプログラムの作業をやってます。ソース中メモリのコントロールところが多いですから、メモリリークをよく発生しました。毎回ソースコードを読んでnew-deleteをチェックすると時間をかかるのに効率が悪いです。_CrtSetBreakAllocを利用してチェックしてみました、使いやすい関数です。

_CrtSetBreakAlloc を使用すると、アプリケーションは、特定のメモリ割り当て位置にブレークポイントを設定し、要求元までトレースすることによって、メモリリークを検出できます。使用されるオブジェクト割り当て順序番号は、ヒープへの割り当て時にメモリ ブロックに割り当てられたシーケンシャル番号です。_DEBUG が未定義の場合、_CrtSetBreakAlloc の呼び出しはプリプロセスで削除されます。
オブジェクト割り当て順序番号は、Crtdbg.h で定義されている _CrtMemBlockHeader 構造体の lRequest フィールドに格納されます。デバッグ ダンプ関数のいずれかが出力するメモリ ブロック情報のレポートでは、中かっこで囲まれて {36} のように表示されます。
次は使用例です。
// crt_setbrkal.c
// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug
&#160;
/*
 * In this program, a call is made to the _CrtSetBreakAlloc routine
 * to verify that the debugger halts program execution when it reaches
 * a specified allocation number.
 [...]]]></description>
			<content:encoded><![CDATA[<p>最近VCを利用してCPPプログラムの作業をやってます。ソース中メモリのコントロールところが多いですから、メモリリークをよく発生しました。毎回ソースコードを読んでnew-deleteをチェックすると時間をかかるのに効率が悪いです。<b>_CrtSetBreakAlloc</b>を利用してチェックしてみました、使いやすい関数です。</p>
<p><span id="more-236"></span>
<p><b>_CrtSetBreakAlloc</b> を使用すると、アプリケーションは、特定のメモリ割り当て位置にブレークポイントを設定し、要求元までトレースすることによって、メモリリークを検出できます。使用されるオブジェクト割り当て順序番号は、ヒープへの割り当て時にメモリ ブロックに割り当てられたシーケンシャル番号です。_DEBUG が未定義の場合、<b>_CrtSetBreakAlloc</b> の呼び出しはプリプロセスで削除されます。
<p>オブジェクト割り当て順序番号は、Crtdbg.h で定義されている <b>_CrtMemBlockHeader</b> 構造体の <i>lRequest</i> フィールドに格納されます。デバッグ ダンプ関数のいずれかが出力するメモリ ブロック情報のレポートでは、中かっこで囲まれて {36} のように表示されます。
<p>次は使用例です。</p>
<div class="hl-surround"><ol class="hl-main ln-show" title="Double click to hide line number." ondblclick = "linenumber(this)"><li class="hl-firstline"><span style="color: #ffa500;">// crt_setbrkal.c</span></li>
<li><span style="color: #ffa500;">// compile with: -D_DEBUG /MTd -Od -Zi -W3 /c /link -verbose:lib -debug</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span class="hl-mlcomment">/*</span></li>
<li><span class="hl-mlcomment"> * In this program, a call is made to the _CrtSetBreakAlloc routine</span></li>
<li><span class="hl-mlcomment"> * to verify that the debugger halts program execution when it reaches</span></li>
<li><span class="hl-mlcomment"> * a specified allocation number.</span></li>
<li><span class="hl-mlcomment"> */</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span class="hl-prepro">#include </span><span style="color: #8b0000;">&lt;</span><span style="color: Red;">malloc.h</span><span style="color: #8b0000;">&gt;</span><span class="hl-prepro"></span></li>
<li><span class="hl-prepro">#include </span><span style="color: #8b0000;">&lt;</span><span style="color: Red;">crtdbg.h</span><span style="color: #8b0000;">&gt;</span><span class="hl-prepro"></span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span class="hl-types">int</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">main</span><span style="color: Olive;">(</span><span style="color: Gray;"> </span><span style="color: Olive;">)</span></li>
<li><span style="color: Olive;">{</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-types">long</span><span style="color: Gray;">&nbsp;</span><span style="color: Blue;">allocReqNum</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-types">char</span><span style="color: Gray;"> *</span><span style="color: Blue;">my_pointer</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-mlcomment">/* </span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Allocate &quot;my_pointer&quot; for the first</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * time and ensure that it gets allocated correctly</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">my_pointer</span><span style="color: Gray;"> = </span><span style="color: Blue;">malloc</span><span style="color: Olive;">(</span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_CrtIsMemoryBlock</span><span style="color: Olive;">(</span><span style="color: Blue;">my_pointer</span><span style="color: Gray;">, </span><span style="color: Maroon;">10</span><span style="color: Gray;">, &amp;</span><span style="color: Blue;">allocReqNum</span><span style="color: Gray;">, </span><span class="hl-prepro">NULL</span><span style="color: Gray;">, </span><span class="hl-prepro">NULL</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-mlcomment">/* </span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Set a breakpoint on the allocation request</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * number for &quot;my_pointer&quot;</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_CrtSetBreakAlloc</span><span style="color: Olive;">(</span><span style="color: Blue;">allocReqNum</span><span style="color: Gray;">+</span><span style="color: Maroon;">2</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">_crtBreakAlloc</span><span style="color: Gray;"> = </span><span style="color: Blue;">allocReqNum</span><span style="color: Gray;">+</span><span style="color: Maroon;">2</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span class="hl-mlcomment">/* </span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * Alternate freeing and reallocating &quot;my_pointer&quot;</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * to verify that the debugger halts program execution</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; * when it reaches the allocation request</span></li>
<li><span class="hl-mlcomment">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; */</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">free</span><span style="color: Olive;">(</span><span style="color: Blue;">my_pointer</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">my_pointer</span><span style="color: Gray;"> = </span><span style="color: Blue;">malloc</span><span style="color: Olive;">(</span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">free</span><span style="color: Olive;">(</span><span style="color: Blue;">my_pointer</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">my_pointer</span><span style="color: Gray;"> = </span><span style="color: Blue;">malloc</span><span style="color: Olive;">(</span><span style="color: Maroon;">10</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Gray;">&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: Blue;">free</span><span style="color: Olive;">(</span><span style="color: Blue;">my_pointer</span><span style="color: Olive;">)</span><span style="color: Gray;">;</span></li>
<li><span style="color: Olive;">}</span></li></ol></div>
<p><b>_CrtSetBreakAlloc</b>についてもっと詳しい情報と関連関数の説明は次のURLをクリックして参考してください。
<pre><a title="http://msdn.microsoft.com/ja-jp/library/4wth1ha5(VS.80).aspx" href="http://msdn.microsoft.com/ja-jp/library/4wth1ha5(VS.80).aspx">http://msdn.microsoft.com/ja-jp/library/4wth1ha5(VS.80).aspx</a></pre>
<h3>Random Posts</h3>
<ul class="related_post">
<li><a href="http://digitechlog.com/2010/04/19/fzip-actionscript-3-open-source-class-library.html" title="FZip: ZIP読込み、作成用AS3のライブラリ">FZip: ZIP読込み、作成用AS3のライブラリ</a></li>
<li><a href="http://digitechlog.com/2009/10/15/alcon-a-lightweight-debugging-tool-for-actionscript-developers.html" title="Alcon: オープンソースのActionScript向けの軽量デバッギングツール">Alcon: オープンソースのActionScript向けの軽量デバッギングツール</a></li>
<li><a href="http://digitechlog.com/2009/06/08/pngpong-an-open-source-solution-to-display-transparent-pngs-in-ie-firefox-and-safari.html" title="PNGPong: フィルタもしくは複雑なJavaScriptとCSSを使用せず透明PNG表示する問題を解決するオープンソースのライブラリ">PNGPong: フィルタもしくは複雑なJavaScriptとCSSを使用せず透明PNG表示する問題を解決するオープンソースのライブラリ</a></li>
<li><a href="http://digitechlog.com/2011/11/08/php-screw.html" title="オープンソースソフトウェアPHP ScrewでPHPスクリプトを暗号化する">オープンソースソフトウェアPHP ScrewでPHPスクリプトを暗号化する</a></li>
<li><a href="http://digitechlog.com/2009/07/10/openamf-free-open-source-alternative-to-adobe-java-flash-remoting.html" title="OpenAMF: オープンソースのJava Flashリモートツール">OpenAMF: オープンソースのJava Flashリモートツール</a></li>
<li><a href="http://digitechlog.com/2008/12/15/how-to-compile-a-flex-application-using-maven-apache-software-foundation.html" title="Mavenを使ってFlexアプリケーションをコンパイルとするサンプル">Mavenを使ってFlexアプリケーションをコンパイルとするサンプル</a></li>
<li><a href="http://digitechlog.com/2009/01/09/the-sample-source-code-of-emb-a-single-youtube-video-inside-your-flex-application.html" title="FlexアプリケーションにYouTubeビデオを埋め込むサンプルソースコード">FlexアプリケーションにYouTubeビデオを埋め込むサンプルソースコード</a></li>
<li><a href="http://digitechlog.com/2010/05/17/open-source-library-betweenas3-tutorials.html" title="オープンソースのASライブラリBetweenAS3のチュートリアル">オープンソースのASライブラリBetweenAS3のチュートリアル</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://digitechlog.com/2009/01/14/how-to-use-_crtsetbreakalloc-crt-to-check-memory-leak-in-cpp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

