<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Possible memory leak in allegro 5.0.10</title>
		<link>http://www.allegro.cc/forums/view/613126</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 18 Aug 2013 12:38:54 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>OK, here is the code I (mostly) took from wiki:</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">  1</span><span class="p">#define CRTDBG_MAP_ALLOC</span>
<span class="number">  2</span><span class="p">#include &lt;stdlib.h&gt;</span>
<span class="number">  3</span><span class="p">#include &lt;crtdbg.h&gt;</span>
<span class="number">  4</span>
<span class="number">  5</span><span class="p">#include "allegro5/allegro.h"</span>
<span class="number">  6</span><span class="p">#include "allegro5/allegro_image.h"</span>
<span class="number">  7</span><span class="p">#include "allegro5/allegro_native_dialog.h"</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span>
<span class="number"> 10</span><span class="k2">{</span>
<span class="number"> 11</span>  _CrtSetDbgFlag <span class="k2">(</span> _CRTDBG_ALLOC_MEM_DF <span class="k3">|</span>_CRTDBG_LEAK_CHECK_DF <span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 13</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a>  <span class="k3">*</span>image   <span class="k3">=</span> NULL<span class="k2">;</span>
<span class="number"> 14</span> 
<span class="number"> 15</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> 
<span class="number"> 16</span>  <span class="k2">{</span>
<span class="number"> 17</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Error"</span>, <span class="s">"Failed to initialize allegro!"</span>, 
<span class="number"> 18</span>                  NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 20</span>  <span class="k2">}</span>
<span class="number"> 21</span> 
<span class="number"> 22</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> 
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Error"</span>, <span class="s">"Failed to initialize al_init_image_addon!"</span>, 
<span class="number"> 25</span>                  NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 27</span>  <span class="k2">}</span>
<span class="number"> 28</span> 
<span class="number"> 29</span>  display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">800</span>,<span class="n">600</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 30</span> 
<span class="number"> 31</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> 
<span class="number"> 32</span>  <span class="k2">{</span>
<span class="number"> 33</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Error"</span>, <span class="s">"Failed to initialize display!"</span>, 
<span class="number"> 34</span>                  NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 36</span>  <span class="k2">}</span>
<span class="number"> 37</span> 
<span class="number"> 38</span>  image <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"image.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span> 
<span class="number"> 40</span>  <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>image<span class="k2">)</span> 
<span class="number"> 41</span>  <span class="k2">{</span>
<span class="number"> 42</span>    <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Error"</span>, <span class="s">"Failed to load image!"</span>, 
<span class="number"> 43</span>                    NULL, ALLEGRO_MESSAGEBOX_ERROR<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 44</span>    <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 45</span>    <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 46</span>  <span class="k2">}</span>
<span class="number"> 47</span> 
<span class="number"> 48</span>  <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>image,<span class="n">200</span>,<span class="n">200</span>,<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 49</span> 
<span class="number"> 50</span>  <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 51</span>  <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">2</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 52</span> 
<span class="number"> 53</span>  <a href="http://www.allegro.cc/manual/al_destroy_display"><span class="a">al_destroy_display</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 54</span>  <a href="http://www.allegro.cc/manual/al_destroy_bitmap"><span class="a">al_destroy_bitmap</span></a><span class="k2">(</span>image<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 55</span>  <a href="http://www.allegro.cc/manual/al_shutdown_image_addon"><span class="a">al_shutdown_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 56</span>  <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 57</span>
<span class="number"> 58</span>  <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 59</span><span class="k2">}</span>
</div></div><p>

I also added the _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF |_CRTDBG_LEAK_CHECK_DF ) line which is a crt function which spots memory leaks and dumps them to output at program termination (<a href="http://msdn.microsoft.com/en-us/library/vstudio/x98tx3cf.aspx">http://msdn.microsoft.com/en-us/library/vstudio/x98tx3cf.aspx</a>)<br />When the program terminates, I get the following output:</p><p><i>Detected memory leaks!</i></p><p><i>Dumping objects -&gt;
{564} normal block at 0x007CB008, 65536 bytes long.
 Data: &lt;+Da +Da +Da +Da &gt; 2B 44 61 FF 2B 44 61 FF 2B 44 61 FF 2B 44 61 FF 
Object dump complete.</i></p><p>I then set a breakpoint at block 564 allocation, and this block is allocated when allegro bitmap is loaded, specifically, in _al_d3d_create_bitmap(), you can see attachment to get the idea where it is.</p><p>Memory for d3d bitmap is probably not deallocated at program termination, despite explicit call to allegro_destroy_bitmap().</p><p>Or it may be false positive.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Fri, 16 Aug 2013 13:03:22 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>65536 bytes!  Zomg!
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Arthur Kalliokoski)</author>
		<pubDate>Fri, 16 Aug 2013 13:10:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Actually, there must be an error in this tutorial: <a href="http://wiki.allegro.cc/index.php?title=Basic_tutorial_on_loading_and_showing_images">http://wiki.allegro.cc/index.php?title=Basic_tutorial_on_loading_and_showing_images</a><br />When I free the image BEFORE freeing the display (which uses this image, probably), no memory leaks are detected.<br />I must say, though, that it is not specified anywhere, although seems natural. However, this tutorial really confused me.</p><p>P.S.: Can I edit the order of these calls in wiki?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Aikei_c)</author>
		<pubDate>Fri, 16 Aug 2013 13:14:26 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Of course you can. Any contribution to the wiki is welcome and appreciated.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Vanneto)</author>
		<pubDate>Fri, 16 Aug 2013 20:33:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>When you destroy the display first, the bitmap is converted to a memory bitmap. So perhaps that process is leaking some memory.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Matthew Leverton)</author>
		<pubDate>Fri, 16 Aug 2013 21:30:17 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It shouldn&#39;t though. If no one else takes this, I&#39;ll look into it after my holiday.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sun, 18 Aug 2013 11:57:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Holidays are the perfect time to work on side projects.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 18 Aug 2013 12:08:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Unfortunately, not so if they are <i>family</i> holidays. Ah well, that&#39;s what it&#39;s like to be a father. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (beoran)</author>
		<pubDate>Sun, 18 Aug 2013 12:22:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Nah, nothing says you actually have to spend all of your time on a holiday catering to your family <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Sun, 18 Aug 2013 12:38:54 +0000</pubDate>
	</item>
</rss>
