<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Bad memory leak in al_get_pixel on Linux?</title>
		<link>http://www.allegro.cc/forums/view/615319</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 05 May 2015 17:59:47 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>This function is throwing insane amounts of memory leaks in Valgrind and seems to be corrupting my game.</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><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>bitmap, <span class="k1">int</span> x, <span class="k1">int</span> y<span class="k2">)</span>
<span class="number">  2</span><span class="k2">{</span>
<span class="number">  3</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_LOCKED_REGION"><span class="a">ALLEGRO_LOCKED_REGION</span></a> <span class="k3">*</span>lr<span class="k2">;</span>
<span class="number">  4</span>   <span class="k1">char</span> <span class="k3">*</span>data<span class="k2">;</span>
<span class="number">  5</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> color<span class="k2">;</span>
<span class="number">  6</span>
<span class="number">  7</span>   <span class="k1">if</span> <span class="k2">(</span>bitmap-&gt;parent<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  8</span>      x <span class="k3">+</span><span class="k3">=</span> bitmap-&gt;xofs<span class="k2">;</span>
<span class="number">  9</span>      y <span class="k3">+</span><span class="k3">=</span> bitmap-&gt;yofs<span class="k2">;</span>
<span class="number"> 10</span>      bitmap <span class="k3">=</span> bitmap-&gt;parent<span class="k2">;</span>
<span class="number"> 11</span>   <span class="k2">}</span>
<span class="number"> 12</span>
<span class="number"> 13</span>   <span class="k1">if</span> <span class="k2">(</span>bitmap-&gt;locked<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 14</span>      x <span class="k3">-</span><span class="k3">=</span> bitmap-&gt;lock_x<span class="k2">;</span>
<span class="number"> 15</span>      y <span class="k3">-</span><span class="k3">=</span> bitmap-&gt;lock_y<span class="k2">;</span>
<span class="number"> 16</span>      <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> x <span class="k3">&gt;</span><span class="k3">=</span> bitmap-&gt;lock_w <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&gt;</span><span class="k3">=</span> bitmap-&gt;lock_h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 17</span>         ALLEGRO_ERROR<span class="k2">(</span><span class="s">"Out of bounds."</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>color, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 19</span>         <span class="k1">return</span> color<span class="k2">;</span>
<span class="number"> 20</span>      <span class="k2">}</span>
<span class="number"> 21</span>
<span class="number"> 22</span>      data <span class="k3">=</span> bitmap-&gt;locked_region.data<span class="k2">;</span>
<span class="number"> 23</span>      data <span class="k3">+</span><span class="k3">=</span> y <span class="k3">*</span> bitmap-&gt;locked_region.pitch<span class="k2">;</span>
<span class="number"> 24</span>      data <span class="k3">+</span><span class="k3">=</span> x <span class="k3">*</span> <a href="http://www.allegro.cc/manual/al_get_pixel_size"><span class="a">al_get_pixel_size</span></a><span class="k2">(</span>bitmap-&gt;locked_region.format<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span>      _AL_INLINE_GET_PIXEL<span class="k2">(</span>bitmap-&gt;locked_region.format, data, color, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 27</span>   <span class="k2">}</span>
<span class="number"> 28</span>   <span class="k1">else</span> <span class="k2">{</span>
<span class="number"> 29</span>      <span class="c">/* FIXME: must use clip not full bitmap */</span>
<span class="number"> 30</span>      <span class="k1">if</span> <span class="k2">(</span>x <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&lt;</span> <span class="n">0</span> <span class="k3">|</span><span class="k3">|</span> x <span class="k3">&gt;</span><span class="k3">=</span> bitmap-&gt;w <span class="k3">|</span><span class="k3">|</span> y <span class="k3">&gt;</span><span class="k3">=</span> bitmap-&gt;h<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>color, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>         <span class="k1">return</span> color<span class="k2">;</span>
<span class="number"> 33</span>      <span class="k2">}</span>
<span class="number"> 34</span>
<span class="number"> 35</span>      <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><span class="k2">(</span>lr <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_lock_bitmap_region"><span class="a">al_lock_bitmap_region</span></a><span class="k2">(</span>bitmap, x, y, <span class="n">1</span>, <span class="n">1</span>, bitmap-&gt;format,
<span class="number"> 36</span>            ALLEGRO_LOCK_READONLY<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
<span class="number"> 37</span>      <span class="k2">{</span>
<span class="number"> 38</span>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_569.html" target="_blank">memset</a><span class="k2">(</span><span class="k3">&amp;</span>color, <span class="n">0</span>, <span class="k1">sizeof</span><span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 39</span>         <span class="k1">return</span> color<span class="k2">;</span>
<span class="number"> 40</span>      <span class="k2">}</span>
<span class="number"> 41</span>
<span class="number"> 42</span>      <span class="c">/* FIXME: check for valid pixel format */</span>
<span class="number"> 43</span>
<span class="number"> 44</span>      data <span class="k3">=</span> lr-&gt;data<span class="k2">;</span>
<span class="number"> 45</span>      _AL_INLINE_GET_PIXEL<span class="k2">(</span>bitmap-&gt;format, data, color, <span class="k1">false</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 46</span>
<span class="number"> 47</span>      <a href="http://www.allegro.cc/manual/al_unlock_bitmap"><span class="a">al_unlock_bitmap</span></a><span class="k2">(</span>bitmap<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 48</span>   <span class="k2">}</span>
<span class="number"> 49</span>
<span class="number"> 50</span>   <span class="k1">return</span> color<span class="k2">;</span>
<span class="number"> 51</span><span class="k2">}</span>
</div></div><p>

I kept noticing that randomly, one of the two players in my game would not be drawn. Then I found their x/y coordinates were corrupted. </p><p>This simple function calls it, and uses it for per-pixel collision detection:
</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="k1">bool</span> check_map_blocked<span class="k2">(</span><span class="k1">float</span> x, <span class="k1">float</span> y<span class="k2">)</span>
<span class="number">  2</span>  <span class="k2">{</span>
<span class="number">  3</span>  <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  4</span>  <span class="k1">if</span><span class="k2">(</span>y <span class="k3">&lt;</span> <span class="n">0</span><span class="k2">)</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  5</span>  <span class="k1">if</span><span class="k2">(</span>x <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_width"><span class="a">al_get_bitmap_width</span></a><span class="k2">(</span>map_bmp<span class="k2">)</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  6</span>  <span class="k1">if</span><span class="k2">(</span>y <span class="k3">&gt;</span> <a href="http://www.allegro.cc/manual/al_get_bitmap_height"><span class="a">al_get_bitmap_height</span></a><span class="k2">(</span>map_bmp<span class="k2">)</span><span class="k3">-</span><span class="n">1</span><span class="k2">)</span><span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number">  7</span>  <span class="k1">if</span><span class="k2">(</span>map_bmp <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k1">throw</span> <span class="s">"shit storm"</span><span class="k2">;</span>
<span class="number">  8</span>  <a href="http://www.allegro.cc/manual/ALLEGRO_COLOR"><span class="a">ALLEGRO_COLOR</span></a> temp <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a><span class="k2">(</span>map_bmp, x, y<span class="k2">)</span><span class="k2">;</span>
<span class="number">  9</span>    
<span class="number"> 10</span>  <span class="k1">if</span><span class="k2">(</span>temp.r <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> temp.g <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span> <span class="k3">&amp;</span><span class="k3">&amp;</span> temp.b <span class="k3">=</span><span class="k3">=</span> <span class="n">0</span><span class="k2">)</span>
<span class="number"> 11</span>    <span class="k2">{</span>
<span class="number"> 12</span>    <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span>
<span class="number"> 13</span>    <span class="k2">}</span><span class="k1">else</span><span class="k2">{</span>
<span class="number"> 14</span>    <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 15</span>    <span class="k2">}</span>
<span class="number"> 16</span>  
<span class="number"> 17</span>  <span class="k2">}</span>
</div></div><p>

The error goes over and over:
</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="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    at <span class="n">0x4E7539A</span><span class="k2">:</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a> <span class="k2">(</span>bitmap_pixel.c:56<span class="k2">)</span>
<span class="number">  2</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x402F63</span><span class="k2">:</span> object_type::check_map_blocked<span class="k2">(</span><span class="k1">float</span>, <span class="k1">float</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:244<span class="k2">)</span>
<span class="number">  3</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x403256</span><span class="k2">:</span> object_type::logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:291<span class="k2">)</span>
<span class="number">  4</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x4036B9</span><span class="k2">:</span> man_type::logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:388<span class="k2">)</span>
<span class="number">  5</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x40201A</span><span class="k2">:</span> logic<span class="k2">(</span>map_type<span class="k3">*</span>, std::vector<span class="k3">&lt;</span>man_type<span class="k3">*</span>, std::allocator<span class="k3">&lt;</span>man_type<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&gt;</span>, std::vector<span class="k3">&lt;</span>bird_type<span class="k3">*</span>, std::allocator<span class="k3">&lt;</span>bird_type<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&gt;</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:486<span class="k2">)</span>
<span class="number">  6</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x4026CF</span><span class="k2">:</span> main <span class="k2">(</span>joust_a5.cpp:623<span class="k2">)</span>
<span class="number">  7</span>
<span class="number">  8</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span> Use of uninitialised value of size <span class="n">8</span>
<span class="number"> 11</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    at <span class="n">0x4E75DE1</span><span class="k2">:</span> <a href="http://www.allegro.cc/manual/al_get_pixel"><span class="a">al_get_pixel</span></a> <span class="k2">(</span>bitmap_pixel.c:71<span class="k2">)</span>
<span class="number"> 12</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x402F63</span><span class="k2">:</span> object_type::check_map_blocked<span class="k2">(</span><span class="k1">float</span>, <span class="k1">float</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:244<span class="k2">)</span>
<span class="number"> 13</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x403256</span><span class="k2">:</span> object_type::logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:291<span class="k2">)</span>
<span class="number"> 14</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x4036B9</span><span class="k2">:</span> man_type::logic<span class="k2">(</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:388<span class="k2">)</span>
<span class="number"> 15</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x40201A</span><span class="k2">:</span> logic<span class="k2">(</span>map_type<span class="k3">*</span>, std::vector<span class="k3">&lt;</span>man_type<span class="k3">*</span>, std::allocator<span class="k3">&lt;</span>man_type<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&gt;</span>, std::vector<span class="k3">&lt;</span>bird_type<span class="k3">*</span>, std::allocator<span class="k3">&lt;</span>bird_type<span class="k3">*</span><span class="k3">&gt;</span> <span class="k3">&gt;</span><span class="k2">)</span> <span class="k2">(</span>joust_a5.cpp:486<span class="k2">)</span>
<span class="number"> 16</span><span class="k3">=</span><span class="k3">=</span><span class="n">37649</span><span class="k3">=</span><span class="k3">=</span>    by <span class="n">0x4026CF</span><span class="k2">:</span> main <span class="k2">(</span>joust_a5.cpp:623<span class="k2">)</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Mon, 27 Apr 2015 07:46:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Those look like uninitialized memory reads, not leaks. What version of Allegro is this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Mon, 27 Apr 2015 07:56:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry, that&#39;s what I meant to say. </p><p>Allegro 5.1.7.</p><p>Linux, OpenGL.</p><p>Though, I&#39;m having trouble replicating it in a small example app, so maybe I&#39;m being a moron somewhere else. I&#39;m still checking.</p><p>[edit] I&#39;m going to bed for the night.</p><p>[edit 2]</p><p>Okay, it doesn&#39;t actually look like it&#39;s Allegro fault. (Yippie!)</p><p>However, check this code out:
</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="k1">class</span> object_type
<span class="number">  2</span>  <span class="k2">{</span>
<span class="number">  3</span>  <span class="c">//...</span>
<span class="number">  4</span>  <span class="k1">void</span> <span class="k1">virtual</span> set_owner<span class="k2">(</span>object_type <span class="k3">*</span>obj<span class="k2">)</span>
<span class="number">  5</span>    <span class="k2">{</span>
<span class="number">  6</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>owner <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  7</span>    owner <span class="k3">=</span> obj<span class="k2">;</span> 
<span class="number">  8</span>    is_connected_to_owner <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span> 
<span class="number">  9</span>    <span class="k2">}</span>
<span class="number"> 10</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">class</span> man_type <span class="k2">:</span> <span class="k1">public</span> object_type
<span class="number"> 13</span>  <span class="k2">{</span>
<span class="number"> 14</span>  <span class="c">//...</span>
<span class="number"> 15</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><span class="k1">class</span> bird_type <span class="k2">:</span> <span class="k1">public</span> object_type
<span class="number"> 18</span>  <span class="k2">{</span>
<span class="number"> 19</span>  <span class="c">//...</span>
<span class="number"> 20</span>  <span class="k2">}</span><span class="k2">;</span>
<span class="number"> 21</span>
<span class="number"> 22</span><span class="k1">int</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 23</span>  <span class="k2">{</span>
<span class="number"> 24</span>  <span class="c">//...</span>
<span class="number"> 25</span>  map_type map<span class="k2">(</span><span class="s">"data/map.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 26</span>
<span class="number"> 27</span>  man_type <span class="k3">*</span>temp_man   <span class="k3">=</span> <span class="k1">new</span> man_type<span class="k2">(</span><span class="n">200</span>, <span class="n">200</span>, <span class="k3">&amp;</span>map<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 28</span>  bird_type <span class="k3">*</span>temp_bird <span class="k3">=</span> <span class="k1">new</span> bird_type<span class="k2">(</span><span class="n">200</span>, <span class="n">200</span>, <span class="k3">&amp;</span>map<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 29</span>  
<span class="number"> 30</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>temp_man  <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 31</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>temp_bird <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 32</span>  
<span class="number"> 33</span>  temp_man <span class="k3">-</span><span class="k3">&gt;</span>set_owner<span class="k2">(</span>temp_bird<span class="k2">)</span><span class="k2">;</span> <span class="c">//FAILS on assert inside set_owner</span>
<span class="number"> 34</span>  temp_bird-&gt;set_owner<span class="k2">(</span>temp_man<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 35</span>  
<span class="number"> 36</span>  man_type <span class="k3">*</span>temp_man2   <span class="k3">=</span> <span class="k1">new</span> man_type<span class="k2">(</span><span class="n">300</span>, <span class="n">300</span>, <span class="k3">&amp;</span>map<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 37</span>  bird_type <span class="k3">*</span>temp_bird2 <span class="k3">=</span> <span class="k1">new</span> bird_type<span class="k2">(</span><span class="n">300</span>, <span class="n">300</span>, <span class="k3">&amp;</span>map<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 38</span>  
<span class="number"> 39</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>temp_man2  <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 40</span>    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>temp_bird2 <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 41</span>  
<span class="number"> 42</span>  temp_man2 <span class="k3">-</span><span class="k3">&gt;</span>set_owner<span class="k2">(</span>temp_bird2<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 43</span>  temp_bird2-&gt;set_owner<span class="k2">(</span>temp_man2<span class="k2">)</span><span class="k2">;</span>  
<span class="number"> 44</span>  <span class="k2">}</span>
</div></div><p>

Can I not pass a child class with a bass class pointer? Shouldn&#39;t RTTI allow this?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 29 Apr 2015 06:13:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Are you initializing owner anywhere?</p><p>Those assert(temp_man) statements you have aren&#39;t doing anything, because by default new throws std::bad_alloc upon failure. You have to use no throw new, or catch the exception.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 29 Apr 2015 06:40:05 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615319/1012679#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Are you initializing owner anywhere?</p><p>Those assert(temp_man) statements you have aren&#39;t doing anything, because by default new throws std::bad_alloc upon failure. You have to use no throw new, or catch the exception.
</p></div></div><p>
I just tossed those asserts in there to be absolutely sure. But thanks, I don&#39;t think I remembered that bad_alloc gets thrown.</p><p>Owner is just a member of object_type. set_owner() is a required function, it&#39;s not apart of the constructor to allow for circular linking (bird &lt;-&gt; man). So owner gets set by set_owner() and nowhere else.</p><p>The strange thing is that sometimes... it doesn&#39;t fail. Re-running it only sometimes crashes it. But I&#39;m not really doing much else in my code that involves pointers...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 29 Apr 2015 07:05:06 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615319/1012681#target">Chris Katko</a> said:</div><div class="quote"><p>
Owner is just a member of object_type. set_owner() is a required function, it&#39;s not apart of the constructor to allow for circular linking (bird &lt;-&gt; man). So owner gets set by set_owner() and nowhere else.
</p></div></div><p>
If you don&#39;t initialize owner it could be any value. Which means this code could evaluate to true or false. <span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>owner <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span></span>. If you want it to only be set once upon construction, initialize it to 0 and then assert it is NULL before assigning it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 29 Apr 2015 07:30:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Durr, that&#39;s a good point.</p><p>Secondly, oh my god, I can&#39;t believe I missed a typo... and apparently failed to copy it properly when I posted... or maybe I changed it, I don&#39;t know but this is definitely wrong:</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> <span class="k1">virtual</span> set_owner<span class="k2">(</span>object_type <span class="k3">*</span>obj, std::string helper<span class="k2">)</span>
    <span class="k2">{</span>
    <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s\n"</span>, helper.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
    <a href="http://www.delorie.com/djgpp/doc/libc/libc_48.html" target="_blank">assert</a><span class="k2">(</span>owner <span class="k3">!</span><span class="k3">=</span> NULL<span class="k2">)</span><span class="k2">;</span> <span class="c">//&lt;--- should be obj != NULL</span>
    owner <span class="k3">=</span> obj<span class="k2">;</span> 
    is_connected_to_owner <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span> 
    <span class="k2">}</span>
</pre></div></div><p>

The game is running now... though, I can&#39;t think of what I&#39;ve done that fixed it except fixing the improper debugging code which was added after things started corrupting... I&#39;ll do more testing.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Wed, 29 Apr 2015 07:37:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>That does change things a bit. <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Wed, 29 Apr 2015 07:38:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It&#39;s still corrupted somewhere. <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /> Any ideas for tracking down a lone pointer problem? The whole program can&#39;t be more than 800 lines.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Thu, 30 Apr 2015 04:49:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><b>Protip:</b> Learn to use Git and <u>use</u> it. If things are broken commit. If things start working commit. You can easily compare. The history doesn&#39;t have to be permanent. If it&#39;s stupid and you don&#39;t think it adds value you can rewrite the history to remove it after. It helps you to make sense of things like this. And so much more.</p><p><b>Append:</b></p><p>You can try valgrind in Linux. I&#39;m not sure if it will catch this particular problem, but I suspect that it might...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (bamccaig)</author>
		<pubDate>Thu, 30 Apr 2015 05:28:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>valgrind and similar tools are your friend. a good debugger helps too.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 30 Apr 2015 07:12:45 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Memwatch works pretty well and isn&#39;t *nix specific so you could probably use it in any platform.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (raynebc)</author>
		<pubDate>Thu, 30 Apr 2015 09:49:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>On SOLARIS there is also dbx debugger with the check -all or check -memuse.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 05 May 2015 15:25:09 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I might have done something even sillier. I had velocity code in an object that when I moved some code around, no longer initialized velocities to zero at start. Ever since I fixed that, I haven&#39;t noticed the problem anymore--though, it could still be there.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Tue, 05 May 2015 17:59:47 +0000</pubDate>
	</item>
</rss>
