<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Pointer to a Pointer</title>
		<link>http://www.allegro.cc/forums/view/586035</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 24 Jun 2006 14:36:21 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Something seems to be wrong with my trying to use a pointer to a pointer to create a dynamic array. I have several dynamic arrays and I perform the same operations on them, so I want to have a function and pass the arrays as parameters so I don&#39;t have redundant code. But for some reason it simply doesn&#39;t work. The arrays get built wrong and it seems to cause my game to behave very strangely (like some solid tiles being solid and others not).</p><p>Is there something wrong with this code?
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">void</span> readTiles<span class="k2">(</span><span class="k1">int</span><span class="k3">*</span><span class="k3">*</span> array, <span class="k1">int</span><span class="k3">*</span> total, <span class="k1">int</span><span class="k3">*</span> j, <span class="k1">int</span> tileSet, <a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> magic<span class="k2">)</span>
<span class="k2">{</span>
   <span class="k3">*</span>total <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getr" target="_blank"><span class="a">getr</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>magic,<span class="k3">*</span>j,tileSet<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">8</span><span class="k2">;</span> <span class="c">// size of array</span>

   <span class="k3">*</span>array <span class="k3">=</span> <span class="k1">new</span> <span class="k1">int</span><span class="k2">[</span><span class="k3">*</span>total<span class="k2">]</span><span class="k2">;</span> <span class="c">// pointer to a pointer, make the dynamic array</span>

   <span class="k1">for</span> <span class="k2">(</span><span class="k1">int</span> i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> <span class="k3">*</span>total<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="c">// the operations</span>
   <span class="k2">{</span>
      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/getg" target="_blank"><span class="a">getg</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>magic,<span class="k3">*</span>j,tileSet<span class="k2">)</span><span class="k2">)</span><span class="k2">)</span>
         <span class="k2">(</span><span class="k3">*</span>array<span class="k2">)</span><span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <a href="http://www.allegro.cc/manual/getg" target="_blank"><span class="a">getg</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/getpixel" target="_blank"><span class="a">getpixel</span></a><span class="k2">(</span>magic,<span class="k3">*</span>j,tileSet<span class="k2">)</span><span class="k2">)</span><span class="k3">/</span><span class="n">8</span><span class="k2">;</span>
      <span class="k1">else</span>
         <span class="k2">(</span><span class="k3">*</span>array<span class="k2">)</span><span class="k3">&lt;</span>i&gt; <span class="k3">=</span> <span class="k3">-</span><span class="n">1</span><span class="k2">;</span>
      <span class="k3">*</span>j<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span>
   <span class="k2">}</span>
<span class="k2">}</span>
</pre></div></div><p>

And an example of me calling the function:
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span><span class="k3">*</span> solid<span class="k2">;</span>
<span class="k1">int</span> solidTotal, j <span class="k3">=</span> <span class="n">0</span>, tileSet <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<a href="http://www.allegro.cc/manual/BITMAP" target="_blank"><span class="a">BITMAP</span></a><span class="k3">*</span> magic <span class="k3">=</span> <a href="http://www.allegro.cc/manual/load_bitmap" target="_blank"><span class="a">load_bitmap</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
readTiles<span class="k2">(</span><span class="k3">&amp;</span>solid, <span class="k3">&amp;</span>solidTotal, <span class="k3">&amp;</span>j, tileSet, magic<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jeff Bernard)</author>
		<pubDate>Thu, 22 Jun 2006 09:29:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
<span class="source-code"><span class="k3">*</span>j<span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></span>
</p></div></div><p>
<span class="source-code"><span class="k2">(</span><span class="k3">*</span>j<span class="k2">)</span><span class="k3">+</span><span class="k3">+</span><span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Thu, 22 Jun 2006 16:09:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>XD</p><p>Thanks a lot Simon, it works now. I didn&#39;t think I would need parenthesis there because you don&#39;t need them for the =operator. Oh well.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Jeff Bernard)</author>
		<pubDate>Thu, 22 Jun 2006 22:38:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The code <tt>*j++;</tt> is ambiguous if you do not know C&#39;s operator-precedence order. It could either mean <tt>*(j++)</tt> (increment the pointer <tt>j</tt> and then get the contents of the new position of the pointer) or <tt>(*j)++;</tt> (increment the contents of the value pointed to by <tt>j</tt>). Without the brackets, this operation has the effect of <tt>*(j++)</tt>.</p><p>AE.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Andrei Ellman)</author>
		<pubDate>Thu, 22 Jun 2006 23:04:42 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
Thanks a lot Simon, it works now. I didn&#39;t think I would need parenthesis there because you don&#39;t need them for the =operator. Oh well.
</p></div></div><p>
<img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /> Have made this mistake several times myself.. very annoying.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Simon Parzer)</author>
		<pubDate>Fri, 23 Jun 2006 15:35:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>However, ++*j; wouldn&#39;t need () around it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Sat, 24 Jun 2006 01:03:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The evils of terse code. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> When in doubt, use parentheses. When not in doubt, use parentheses. Since you&#39;re using C++ anyhow, you could have used a reference instead of a pointer and avoided the whole mess. Not a critism, really, just a thought.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (_Dante)</author>
		<pubDate>Sat, 24 Jun 2006 14:36:21 +0000</pubDate>
	</item>
</rss>
