<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Keycode out of range</title>
		<link>http://www.allegro.cc/forums/view/618769</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Tue, 17 Jan 2023 21:13:29 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hello everyone, </p><p>I&#39;ve written basic Breakout app in Visual Studio and today I&#39;ve moved to project to Linux/VS Code. I&#39;ve managed to get the app to compile with gcc and to work without any modification. </p><p>However, every key press throws an seg fault. I&#39;ve followed Vivace tutorial, which declares an array of allegro_key_max length. The event is then processed in switch statement with allegro_event_key_down and specific value is fetched with array[keyboard.keycode]. But every key press is out of allegro_key_max range. For example, when pressing right arrow, I get keycode value of 1431940368. The same code worked fine on Visual Studio/Windows.</p><p>Any advice, anything I&#39;m missing here? Did something change in the meantime?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Mon, 09 Jan 2023 11:14:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You&#39;ll need to zero your array. Show code if that doesn&#39;t fix it.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jan 2023 18:20:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It is already zeroed out. Here&#39;s the code:</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">typedef</span> <span class="k1">struct</span> GameObject <span class="k2">{</span>
<span class="number">  2</span>    ...
<span class="number">  3</span>    <span class="k1">unsigned</span> <span class="k1">char</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">int</span> done<span class="k2">;</span>
<span class="number">  5</span>    <span class="k1">int</span> redraw<span class="k2">;</span>
<span class="number">  6</span>    ...
<span class="number">  7</span><span class="k2">}</span> GameObject<span class="k2">;</span>
<span class="number">  8</span>
<span class="number">  9</span><span class="k1">void</span> GameLoop<span class="k2">(</span>GameObject<span class="k3">*</span> gameObject<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 10</span>    <a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>gameObject-&gt;timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span>    <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 13</span>    <span class="k2">{</span>
<span class="number"> 14</span>        <a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>gameObject-&gt;eventQueue, gameObject-&gt;event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span>
<span class="number"> 16</span>        <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span>gameObject-&gt;keyboardState<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 17</span>
<span class="number"> 18</span>        <span class="k1">switch</span> <span class="k2">(</span>gameObject-&gt;event-&gt;type<span class="k2">)</span>
<span class="number"> 19</span>        <span class="k2">{</span>
<span class="number"> 20</span>            <span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 21</span>                <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_ENTER<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 22</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gameObject-&gt;gameRunning<span class="k2">)</span>
<span class="number"> 23</span>                        gameObject-&gt;gameRunning <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span>                <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gameObject-&gt;gameRunning<span class="k2">)</span>
<span class="number"> 26</span>                    <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 27</span>
<span class="number"> 28</span>                <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 29</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>gameObject-&gt;rect-&gt;x1 <span class="k3">-</span> gameObject-&gt;rect-&gt;dx<span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 30</span>                        gameObject-&gt;rect-&gt;x1 <span class="k3">-</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 31</span>                        gameObject-&gt;rect-&gt;x2 <span class="k3">-</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 32</span>                    <span class="k2">}</span>
<span class="number"> 33</span>                <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 34</span>                    <span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>gameObject-&gt;rect-&gt;x2 <span class="k3">+</span> gameObject-&gt;rect-&gt;dx<span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">800</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 35</span>                        gameObject-&gt;rect-&gt;x1 <span class="k3">+</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 36</span>                        gameObject-&gt;rect-&gt;x2 <span class="k3">+</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 37</span>                    <span class="k2">}</span>
<span class="number"> 38</span>
<span class="number"> 39</span>                <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;ball-&gt;isActive<span class="k2">)</span>
<span class="number"> 40</span>                    moveTheBall<span class="k2">(</span>gameObject<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 41</span>
<span class="number"> 42</span>                <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_ESCAPE<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 43</span>                    gameObject-&gt;done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 44</span>
<span class="number"> 45</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> ALLEGRO_KEY_MAX<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 46</span>                    gameObject-&gt;key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">=</span> KEY_SEEN<span class="k2">;</span>
<span class="number"> 47</span>
<span class="number"> 48</span>                gameObject-&gt;redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 49</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 50</span>
<span class="number"> 51</span>            <span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number"> 52</span>                gameObject-&gt;key<span class="k2">[</span>gameObject-&gt;event-&gt;keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> KEY_SEEN <span class="k3">|</span> KEY_RELEASED<span class="k2">;</span>     <span class="k3">-</span><span class="k3">-</span><span class="k3">&gt;</span> <span class="k1">this</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> throws seg fault
<span class="number"> 53</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 54</span>            <span class="k1">case</span> ALLEGRO_EVENT_KEY_UP:
<span class="number"> 55</span>                gameObject-&gt;key<span class="k2">[</span>gameObject-&gt;event-&gt;keyboard.keycode<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">=</span> KEY_RELEASED<span class="k2">;</span>
<span class="number"> 56</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 57</span>            <span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 58</span>                gameObject-&gt;done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 59</span>                <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 60</span>        <span class="k2">}</span> <span class="c">// end switch</span>
<span class="number"> 61</span>
<span class="number"> 62</span>        <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;done<span class="k2">)</span>
<span class="number"> 63</span>            <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 64</span>
<span class="number"> 65</span>        <span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;gameRunning<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 66</span>            ...
<span class="number"> 67</span>        <span class="k2">}</span>
<span class="number"> 68</span>        <span class="k1">else</span> <span class="k2">{</span> <span class="c">// game not running</span>
<span class="number"> 69</span>            ...
<span class="number"> 70</span>        <span class="k2">}</span>
<span class="number"> 71</span>    <span class="k2">}</span>
<span class="number"> 72</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Mon, 09 Jan 2023 19:15:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Please use &lt;code&gt;code goes here...&lt;/code&gt; tags for your code. It looks like event or event-&gt;keyboard is uninitialized. Make sure it is a key event before checking the keyboard field. Post full code, there are parts missing. Just attach a zip file to the reply.</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="number">  2</span><span class="k1">typedef</span> <span class="k1">struct</span> GameObject <span class="k2">{</span>
<span class="number">  3</span>...
<span class="number">  4</span><span class="k1">unsigned</span> <span class="k1">char</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number">  5</span><span class="k1">int</span> done<span class="k2">;</span>
<span class="number">  6</span><span class="k1">int</span> redraw<span class="k2">;</span>
<span class="number">  7</span>...
<span class="number">  8</span><span class="k2">}</span> GameObject<span class="k2">;</span>
<span class="number">  9</span>
<span class="number"> 10</span><span class="k1">void</span> GameLoop<span class="k2">(</span>GameObject<span class="k3">*</span> gameObject<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 11</span><a href="http://www.allegro.cc/manual/al_start_timer"><span class="a">al_start_timer</span></a><span class="k2">(</span>gameObject-&gt;timer<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 12</span>
<span class="number"> 13</span><span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span>
<span class="number"> 14</span><span class="k2">{</span>
<span class="number"> 15</span><a href="http://www.allegro.cc/manual/al_wait_for_event"><span class="a">al_wait_for_event</span></a><span class="k2">(</span>gameObject-&gt;eventQueue, gameObject-&gt;event<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 16</span>
<span class="number"> 17</span><a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span>gameObject-&gt;keyboardState<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">switch</span> <span class="k2">(</span>gameObject-&gt;event-&gt;type<span class="k2">)</span>
<span class="number"> 20</span><span class="k2">{</span>
<span class="number"> 21</span><span class="k1">case</span> ALLEGRO_EVENT_TIMER:
<span class="number"> 22</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_ENTER<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 23</span><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gameObject-&gt;gameRunning<span class="k2">)</span>
<span class="number"> 24</span>gameObject-&gt;gameRunning <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 25</span>
<span class="number"> 26</span><span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>gameObject-&gt;gameRunning<span class="k2">)</span>
<span class="number"> 27</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 28</span>
<span class="number"> 29</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_LEFT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 30</span><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>gameObject-&gt;rect-&gt;x1 <span class="k3">-</span> gameObject-&gt;rect-&gt;dx<span class="k2">)</span> <span class="k3">&gt;</span> <span class="n">0</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 31</span>gameObject-&gt;rect-&gt;x1 <span class="k3">-</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 32</span>gameObject-&gt;rect-&gt;x2 <span class="k3">-</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 33</span><span class="k2">}</span>
<span class="number"> 34</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_RIGHT<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 35</span><span class="k1">if</span> <span class="k2">(</span><span class="k2">(</span>gameObject-&gt;rect-&gt;x2 <span class="k3">+</span> gameObject-&gt;rect-&gt;dx<span class="k2">)</span> <span class="k3">&lt;</span> <span class="n">800</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 36</span>gameObject-&gt;rect-&gt;x1 <span class="k3">+</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 37</span>gameObject-&gt;rect-&gt;x2 <span class="k3">+</span><span class="k3">=</span> gameObject-&gt;rect-&gt;dx<span class="k2">;</span>
<span class="number"> 38</span><span class="k2">}</span>
<span class="number"> 39</span>
<span class="number"> 40</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;ball-&gt;isActive<span class="k2">)</span>
<span class="number"> 41</span>moveTheBall<span class="k2">(</span>gameObject<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 42</span>
<span class="number"> 43</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;key<span class="k2">[</span>ALLEGRO_KEY_ESCAPE<span class="k2">]</span><span class="k2">)</span>
<span class="number"> 44</span>gameObject-&gt;done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 45</span>
<span class="number"> 46</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> ALLEGRO_KEY_MAX<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span>
<span class="number"> 47</span>gameObject-&gt;key<span class="k2">[</span>i<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">=</span> KEY_SEEN<span class="k2">;</span>
<span class="number"> 48</span>
<span class="number"> 49</span>gameObject-&gt;redraw <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 50</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 51</span>
<span class="number"> 52</span><span class="k1">case</span> ALLEGRO_EVENT_KEY_DOWN:
<span class="number"> 53</span>gameObject-&gt;key<span class="k2">[</span>gameObject-&gt;event-&gt;keyboard.keycode<span class="k2">]</span> <span class="k3">=</span> KEY_SEEN <span class="k3">|</span> KEY_RELEASED<span class="k2">;</span> <span class="k3">-</span><span class="k3">-</span><span class="k3">&gt;</span> <span class="k1">this</span> <a href="http://www.allegro.cc/manual/line"><span class="a">line</span></a> throws seg fault
<span class="number"> 54</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 55</span><span class="k1">case</span> ALLEGRO_EVENT_KEY_UP:
<span class="number"> 56</span>gameObject-&gt;key<span class="k2">[</span>gameObject-&gt;event-&gt;keyboard.keycode<span class="k2">]</span> <span class="k3">&amp;</span><span class="k3">=</span> KEY_RELEASED<span class="k2">;</span>
<span class="number"> 57</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 58</span><span class="k1">case</span> ALLEGRO_EVENT_DISPLAY_CLOSE:
<span class="number"> 59</span>gameObject-&gt;done <span class="k3">=</span> <span class="k1">true</span><span class="k2">;</span>
<span class="number"> 60</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 61</span><span class="k2">}</span> <span class="c">// end switch</span>
<span class="number"> 62</span>
<span class="number"> 63</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;done<span class="k2">)</span>
<span class="number"> 64</span><span class="k1">break</span><span class="k2">;</span>
<span class="number"> 65</span>
<span class="number"> 66</span><span class="k1">if</span> <span class="k2">(</span>gameObject-&gt;gameRunning<span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 67</span>...
<span class="number"> 68</span><span class="k2">}</span>
<span class="number"> 69</span><span class="k1">else</span> <span class="k2">{</span> <span class="c">// game not running</span>
<span class="number"> 70</span>...
<span class="number"> 71</span><span class="k2">}</span>
<span class="number"> 72</span><span class="k2">}</span>
<span class="number"> 73</span><span class="k2">}</span>
</div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jan 2023 19:46:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, sorry about the formatting.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Mon, 09 Jan 2023 19:55:03 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I didn&#39;t check everything, but this line stands out :</p><div class="source-code snippet"><div class="inner"><pre>    gameObject-&gt;event <span class="k3">=</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a><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><a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a><span class="k3">*</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Do you see the error?
</p><div class="spoiler"><p>
You&#39;re only allocating &#39;sizeof(ALLEGRO_EVENT*)&#39; bytes. It should be the size of an ALLEGRO_EVENT.
</p></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Mon, 09 Jan 2023 20:40:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I do. I&#39;m getting the size of pointer instead of struct. I&#39;ve changed it and it is working now. </p><p>I was aware of this and this was basically the reason why I switched to Linux. If I recall correctly, Allegro functions request pointers to these structs, hence why I have defined them as pointers. I do remember that Visual Studio didn&#39;t let me initialize the pointers with size of struct, rather it wanted size of pointers, that&#39;s why I left it like this. It was odd to me but it had me pulling my hair out. Similar thing was happening with initialization of block collection and blocks it contains. But then again, I&#39;ve might have been mistaken in some way then.</p><p>One more question. I am able to init Event and keyboard state with size of structs. If I try the same with other Allegro functionalities (timer, event q, display, font) I get the error that I can&#39;t use sizeof on incomplete types. Any advice on how to get around of this problem? I mean, I can leave it as size of pointers but will it have some repercussions in the future?</p><p>Thank you for you help.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Mon, 09 Jan 2023 21:02:02 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I think I would just allocate and clear <span class="source-code">GameObject</span> like this:</p><p>`GameObject gameObject = { 0 };`</p><p>You don&#39;t need malloc, free, or memset for this. It&#39;s just more code, and more error prone.</p><p>Looking at your InitFuncs.c I would remove every single malloc, and have all structs and arrays be inline in GameObject instead. You don&#39;t need heap allocation when your data has fixed sizes and a clearly defined lifetime.</p><p>Some Allegro types have functions that allocate and destroy them for you, like al_create_timer and al_destroy_timer for ALLLEGRO_TIMER, etc. Then you just store the pointer the creation function returns. Other types, like ALLEGRO_EVENT, require you to allocate the structs, it&#39;s often easiest to just put them on the stack.</p><p>You should end up with something like this, this is just the struct definitions I changed:</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">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number">  2</span>    <span class="k1">int</span> cx<span class="k2">;</span>
<span class="number">  3</span>    <span class="k1">int</span> cy<span class="k2">;</span>
<span class="number">  4</span>    <span class="k1">int</span> radius<span class="k2">;</span>
<span class="number">  5</span>    <span class="k1">int</span> dx<span class="k2">;</span>
<span class="number">  6</span>    <span class="k1">int</span> dy<span class="k2">;</span>
<span class="number">  7</span>    <span class="k1">unsigned</span> <span class="k1">int</span> lives<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> color<span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">int</span> isActive<span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span> Ball<span class="k2">;</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number"> 13</span>    Block blocks<span class="k2">[</span>BLOCK_ROWS<span class="k2">]</span><span class="k2">[</span>BLOCK_COUNT<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 14</span>    <span class="k1">unsigned</span> hardBricksRows<span class="k2">;</span>
<span class="number"> 15</span>    <span class="k1">unsigned</span> mediumBricksRows<span class="k2">;</span>
<span class="number"> 16</span>    <span class="k1">unsigned</span> softBricksRows<span class="k2">;</span>
<span class="number"> 17</span><span class="k2">}</span> BlockCollection<span class="k2">;</span>
<span class="number"> 18</span>
<span class="number"> 19</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number"> 20</span>    Level level<span class="k2">[</span>NUM_OF_LEVELS<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 21</span>    BlockCollection blockCollection<span class="k2">;</span>
<span class="number"> 22</span>    <span class="k1">unsigned</span> levelCleared<span class="k2">;</span>
<span class="number"> 23</span><span class="k2">}</span> Levels<span class="k2">;</span>
<span class="number"> 24</span>
<span class="number"> 25</span><span class="k1">typedef</span> <span class="k1">struct</span> <span class="k2">{</span>
<span class="number"> 26</span>    Rectangle <a href="http://www.allegro.cc/manual/rect"><span class="a">rect</span></a><span class="k2">;</span>
<span class="number"> 27</span>    Ball ball<span class="k2">;</span>
<span class="number"> 28</span>    Levels levels<span class="k2">;</span>
<span class="number"> 29</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_TIMER"><span class="a">ALLEGRO_TIMER</span></a><span class="k3">*</span> timer<span class="k2">;</span>
<span class="number"> 30</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT_QUEUE"><span class="a">ALLEGRO_EVENT_QUEUE</span></a><span class="k3">*</span> eventQueue<span class="k2">;</span>
<span class="number"> 31</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a><span class="k3">*</span> display<span class="k2">;</span>
<span class="number"> 32</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_FONT"><span class="a">ALLEGRO_FONT</span></a><span class="k3">*</span> <a href="http://www.allegro.cc/manual/font"><span class="a">font</span></a><span class="k2">;</span>
<span class="number"> 33</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_EVENT"><span class="a">ALLEGRO_EVENT</span></a> event<span class="k2">;</span>
<span class="number"> 34</span>    <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> keyboardState<span class="k2">;</span>
<span class="number"> 35</span>    <span class="k1">unsigned</span> <span class="k1">char</span> <a href="http://www.allegro.cc/manual/key"><span class="a">key</span></a><span class="k2">[</span>ALLEGRO_KEY_MAX<span class="k2">]</span><span class="k2">;</span>
<span class="number"> 36</span>    <span class="k1">int</span> done<span class="k2">;</span>
<span class="number"> 37</span>    <span class="k1">int</span> redraw<span class="k2">;</span>
<span class="number"> 38</span>    <span class="k1">unsigned</span> currentLevel<span class="k2">;</span>
<span class="number"> 39</span>    <span class="k1">unsigned</span> score<span class="k2">;</span>
<span class="number"> 40</span>    <span class="k1">bool</span> gameRunning<span class="k2">;</span>
<span class="number"> 41</span><span class="k2">}</span> GameObject<span class="k2">;</span>
</div></div><p>

I removed the struct tags, since I don&#39;t see the point of having both those and the typedefs. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (torhu)</author>
		<pubDate>Tue, 10 Jan 2023 03:28:41 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Something to remember - a pointer may or may not point to actual memory. In your case it pointed to memory, but of the wrong size. It was too small, hence the segfault. VS is giving you bad advice if that is what it told you to do.</p><p>Torhu&#39;s advice is good. Reduce heap allocation as much as possible and declare things on the stack normally.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 10 Jan 2023 20:37:23 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, true. That&#39;s why I moved to Linux, less bloat to deal with.</p><p>torhu, thank you for pointing it out, I will keep that in mind. I really appreciate the advice.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Tue, 10 Jan 2023 22:16:40 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If you run into segfaults / heap / memory issues, on Linux, you can always use the tool &quot;valgrind&quot; to check.</p><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/618769/1053157#target">Edgar Reynaldo</a> said:</div><div class="quote"><p>
Torhu&#39;s advice is good. Reduce heap allocation as much as possible and declare things on the stack normally. 
</p></div></div><p>
Yes.</p><p>If you need to allocate memory on the heap, though, it is preferable to use std::unique_ptr with make_unique. It will automatically destroy the heap-allocated object when itself runs out of scope. But, I&#39;m not sure whether you use C++. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Polybios)</author>
		<pubDate>Sat, 14 Jan 2023 15:13:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>At this moment, I mostly do C because it is smaller language. I&#39;m slowly working my way into C++.</p><p>When I was writing this app, I just learned pointers properly and this was a way to put that knowledge into practice but it came back to bite me. Same thing happens when I try to do something in C++, I try to stuff everything into a class.</p><p>I heard of valgrind but I haven&#39;t used it. I&#39;m using clang-tidy for static analysis, coupled with gcc options like -wall and -werror.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (ismqdb)</author>
		<pubDate>Mon, 16 Jan 2023 01:47:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><pre>-Wall -Wextra -Wshadow</pre><p>
Throw in pedantic for good measure.</p><p>valgrind is easy, all you need is debugging symbols and to install valgrind using your package manager.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 17 Jan 2023 00:06:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>-Wshadow is going to give you an hepta ton +10 of unneeded warning. 
</p><div class="spoiler"><p>
Just wanted to place the wording somewhere. The correct expression in French is &#39;Une tétrachiée plus quinze&#39; but it&#39;s somewhat &#39;loosing it&#39; in the translation.<br /><img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" />
</p></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (GullRaDriel)</author>
		<pubDate>Tue, 17 Jan 2023 21:13:29 +0000</pubDate>
	</item>
</rss>
