<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Pass char * list as function parameter</title>
		<link>http://www.allegro.cc/forums/view/588877</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Mon, 04 Dec 2006 00:26:56 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am writing a text spinner control for my GUI, and when creating the control, I have a function called new_selection. One of the parameters is a list of the values that can be selected. At the moment it is char *values[], but it causes a segfault when a value is accessed. The create code is:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td><span class="c">//gui.h:</span></td></tr><tr><td class="number">2</td><td><span class="k1">typedef</span> <span class="k1">struct</span> SELECTION <span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">int</span> x<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> y<span class="k2">;</span></td></tr><tr><td class="number">5</td><td>  <span class="k1">int</span> w<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  <span class="k1">int</span> h<span class="k2">;</span></td></tr><tr><td class="number">7</td><td>  <span class="k1">int</span> value<span class="k2">;</span></td></tr><tr><td class="number">8</td><td>  <span class="k1">char</span> <span class="k3">*</span>values<span class="k2">[</span><span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>  <span class="k1">int</span> numvalues<span class="k2">;</span></td></tr><tr><td class="number">10</td><td>  <span class="k1">int</span> grey<span class="k2">;</span></td></tr><tr><td class="number">11</td><td>  <span class="k1">int</span> cont<span class="k2">;</span></td></tr><tr><td class="number">12</td><td>  BUTTON <span class="k3">*</span>leftarrow<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>  BUTTON <span class="k3">*</span>rightarrow<span class="k2">;</span></td></tr><tr><td class="number">14</td><td><span class="k2">}</span> SELECTION<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td><span class="c">//gui.c:</span></td></tr><tr><td class="number">17</td><td>SELECTION <span class="k3">*</span>new_selection<span class="k2">(</span><span class="k1">int</span> x, <span class="k1">int</span> y, <span class="k1">int</span> value, <span class="k1">char</span> <span class="k3">*</span>values<span class="k2">[</span><span class="k2">]</span>, <span class="k1">int</span> length, <span class="k1">int</span> numvalues<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">18</td><td>  SELECTION <span class="k3">*</span>tempry <span class="k3">=</span> <span class="k2">(</span>SELECTION <span class="k3">*</span><span class="k2">)</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_551.html" target="_blank">malloc</a><span class="k2">(</span><span class="k1">sizeof</span><span class="k2">(</span>SELECTION<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>  <span class="k1">int</span> n, i<span class="k2">;</span></td></tr><tr><td class="number">20</td><td>&#160;</td></tr><tr><td class="number">21</td><td>  tempry-&gt;x <span class="k3">=</span> x<span class="k2">;</span></td></tr><tr><td class="number">22</td><td>  tempry-&gt;y <span class="k3">=</span> y<span class="k2">;</span></td></tr><tr><td class="number">23</td><td>  tempry-&gt;leftarrow <span class="k3">=</span> new_button<span class="k2">(</span>x, y, <span class="k3">-</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"&lt;"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>  n <span class="k3">=</span> <span class="k2">(</span>length <span class="k3">*</span> <a href="http://www.allegro.cc/manual/text_length" target="_blank"><span class="a">text_length</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/font" target="_blank"><span class="a">font</span></a>, <span class="s">"M"</span><span class="k2">)</span><span class="k2">)</span> <span class="k3">+</span> <span class="n">4</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>  tempry-&gt;rightarrow <span class="k3">=</span> new_button<span class="k2">(</span><span class="k2">(</span>x <span class="k3">+</span> tempry-&gt;leftarrow-&gt;w <span class="k3">+</span> n<span class="k2">)</span>, y, <span class="k3">-</span><span class="n">1</span>, <span class="k3">-</span><span class="n">1</span>, <span class="s">"&gt;"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">26</td><td>  tempry-&gt;w <span class="k3">=</span> <span class="k2">(</span>tempry-&gt;rightarrow-&gt;x <span class="k3">+</span> tempry-&gt;rightarrow-&gt;w<span class="k2">)</span> <span class="k3">-</span> x<span class="k2">;</span></td></tr><tr><td class="number">27</td><td>  tempry-&gt;h <span class="k3">=</span> tempry-&gt;leftarrow-&gt;h<span class="k2">;</span></td></tr><tr><td class="number">28</td><td>  tempry-&gt;value <span class="k3">=</span> value<span class="k2">;</span></td></tr><tr><td class="number">29</td><td>  <span class="k1">for</span><span class="k2">(</span>i <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> i <span class="k3">&lt;</span> numvalues<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">30</td><td>    tempry-&gt;values<span class="k3">&lt;</span>i&gt; <span class="k3">=</span> values<span class="k3">&lt;</span>i&gt;<span class="k2">;</span></td></tr><tr><td class="number">31</td><td>  <span class="k2">}</span></td></tr><tr><td class="number">32</td><td>  tempry-&gt;numvalues <span class="k3">=</span> numvalues<span class="k2">;</span></td></tr><tr><td class="number">33</td><td>  tempry-&gt;grey <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">34</td><td>  tempry-&gt;cont <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">35</td><td>  </td></tr><tr><td class="number">36</td><td>  <span class="k1">return</span> tempry<span class="k2">;</span></td></tr><tr><td class="number">37</td><td><span class="k2">}</span></td></tr></tbody></table></div></div><p>

NOTE: This is actually compiled as C++ and the file name is gui.cpp, but I do not like to use C++ and I am only using so that I will be able to use OpenLayer. Also, there is nothing wrong with my new_button() function. It works fine on it&#39;s own. The offending peice of code is:</p><div class="source-code snippet"><div class="inner"><pre>selection-&gt;values<span class="k2">[</span>selection-&gt;value<span class="k2">]</span>
</pre></div></div><p>

It is passed as the value parameter to textout_centre_ex. Can anybody suggest a way of fixing this?<br />Thanks.</p><p>EDIT:<br />Never mind, changing it to char **values worked. I wonder why I didn&#39;t think of that before...
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Sun, 03 Dec 2006 17:48:48 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I am not 100% sure but it looks like you might have a fence-post error. Doesn&#39;t your compiler give you some kind of warning about char *values[] being assumed to be of size 1?</p><p>[on a second note]<br />Just because you allocate space for SELECTION doesn&#39;t mean that values[] can be of any size.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Three Harris)</author>
		<pubDate>Sun, 03 Dec 2006 20:48:01 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>No, there were no warnings at all. It doesn&#39;t matter anymore anyway.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (James Stanley)</author>
		<pubDate>Mon, 04 Dec 2006 00:26:56 +0000</pubDate>
	</item>
</rss>
