<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>ALMP3 Crash</title>
		<link>http://www.allegro.cc/forums/view/553582</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sat, 17 Dec 2005 23:53:39 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Any ideas why almp3 crashes (on the poll of the mp3, in the decode function)? Here is the relevant mp3 code:</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="k1">class</span> MP3Play <span class="k2">:</span> <span class="k1">public</span> Song</td></tr><tr><td class="number">2</td><td><span class="k2">{</span></td></tr><tr><td class="number">3</td><td>  <span class="c">//IMPLEMENT_SONGTYPE(WavePlay)</span></td></tr><tr><td class="number">4</td><td>  public:</td></tr><tr><td class="number">5</td><td>    <span class="k1">static</span> MusicEngine::Song <span class="k3">*</span>Factory<span class="k2">(</span><span class="k1">const</span> string<span class="k3">&amp;</span> filename<span class="k2">)</span> <span class="k2">{</span> <span class="k1">return</span> <span class="k1">new</span> MP3Play<span class="k2">(</span>filename<span class="k2">)</span><span class="k2">;</span> <span class="k2">}</span></td></tr><tr><td class="number">6</td><td>  </td></tr><tr><td class="number">7</td><td>  public:</td></tr><tr><td class="number">8</td><td>    ALMP3_MP3 <span class="k3">*</span>mp3<span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    </td></tr><tr><td class="number">10</td><td>    MP3Play<span class="k2">(</span><span class="k1">const</span> string<span class="k3">&amp;</span> filename<span class="k2">)</span> <span class="k2">:</span> mp3<span class="k2">(</span>NULL<span class="k2">)</span></td></tr><tr><td class="number">11</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Loading %s\n"</span>, filename.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      <a href="http://www.allegro.cc/manual/PACKFILE" target="_blank"><span class="a">PACKFILE</span></a> <span class="k3">*</span>mp3f <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fopen" target="_blank"><span class="a">pack_fopen</span></a><span class="k2">(</span>filename.c_str<span class="k2">(</span><span class="k2">)</span>, <span class="s">"r"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <span class="k1">if</span><span class="k2">(</span><span class="k3">!</span>mp3f<span class="k2">)</span></td></tr><tr><td class="number">15</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"hmmmmmm\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>      <span class="k1">int</span> size <span class="k3">=</span> file_size<span class="k2">(</span>filename.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">17</td><td>      <span class="k1">char</span> <span class="k3">*</span>mp3data <span class="k3">=</span> <span class="k1">new</span> <span class="k1">char</span><span class="k2">[</span>size<span class="k2">]</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>      size <span class="k3">=</span> <a href="http://www.allegro.cc/manual/pack_fread" target="_blank"><span class="a">pack_fread</span></a><span class="k2">(</span>mp3data, size, mp3f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>      <a href="http://www.allegro.cc/manual/pack_fclose" target="_blank"><span class="a">pack_fclose</span></a><span class="k2">(</span>mp3f<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>      </td></tr><tr><td class="number">21</td><td>      <span class="k1">if</span><span class="k2">(</span><span class="k2">(</span>mp3 <span class="k3">=</span> almp3_create_mp3<span class="k2">(</span>mp3data, size<span class="k2">)</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> NULL<span class="k2">)</span></td></tr><tr><td class="number">22</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"almp3_create_mp3 failed\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>      </td></tr><tr><td class="number">24</td><td>      <span class="k1">delete</span> mp3data<span class="k2">;</span></td></tr><tr><td class="number">25</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>    </td></tr><tr><td class="number">27</td><td>    ~MP3Play<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">28</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">29</td><td>      almp3_destroy_mp3<span class="k2">(</span>mp3<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">30</td><td>      mp3 <span class="k3">=</span> NULL<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>    </td></tr><tr><td class="number">33</td><td>    <span class="k1">void</span> Play<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">34</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">35</td><td>      <span class="k1">if</span><span class="k2">(</span>mp3<span class="k2">)</span></td></tr><tr><td class="number">36</td><td>      <span class="k2">{</span></td></tr><tr><td class="number">37</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Playing...\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">38</td><td>        <span class="k1">if</span><span class="k2">(</span>almp3_play_ex_mp3<span class="k2">(</span>mp3, <span class="n">32768</span>, <span class="n">255</span>, <span class="n">127</span>, <span class="n">1000</span>, <span class="n">0</span><span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> ALMP3_PLAY_BUFFERTOOSMALL<span class="k2">)</span></td></tr><tr><td class="number">39</td><td>          <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"ALMP3_PLAY_BUFFERTOOSMALL\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">40</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">41</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">42</td><td>    </td></tr><tr><td class="number">43</td><td>    <span class="k1">void</span> Stop<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">44</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">45</td><td>      almp3_stop_mp3<span class="k2">(</span>mp3<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">46</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">47</td><td>    </td></tr><tr><td class="number">48</td><td>    <span class="k1">bool</span> Tick<span class="k2">(</span><span class="k2">)</span></td></tr><tr><td class="number">49</td><td>    <span class="k2">{</span></td></tr><tr><td class="number">50</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\rPlaying mp3"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">51</td><td>      </td></tr><tr><td class="number">52</td><td>      <span class="k1">int</span> poll <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">53</td><td>      <span class="k1">if</span><span class="k2">(</span>mp3<span class="k2">)</span></td></tr><tr><td class="number">54</td><td>        poll <span class="k3">=</span> almp3_poll_mp3<span class="k2">(</span>mp3<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">55</td><td>      </td></tr><tr><td class="number">56</td><td>      <span class="k1">if</span><span class="k2">(</span>poll <span class="k3">=</span><span class="k3">=</span> ALMP3_POLL_PLAYJUSTFINISHED <span class="k3">|</span><span class="k3">|</span> poll <span class="k3">=</span><span class="k3">=</span> ALMP3_POLL_NOTPLAYING <span class="k3">|</span><span class="k3">|</span> poll <span class="k3">=</span><span class="k3">=</span> ALMP3_POLL_INTERNALERROR <span class="k3">|</span><span class="k3">|</span> <span class="k3">!</span>mp3<span class="k2">)</span></td></tr><tr><td class="number">57</td><td>        <span class="k1">return</span> <span class="k1">false</span><span class="k2">;</span></td></tr><tr><td class="number">58</td><td>      <span class="k1">return</span> <span class="k1">true</span><span class="k2">;</span></td></tr><tr><td class="number">59</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">60</td><td><span class="k2">}</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

and the not-so-helpful(tm) backtrace:
</p><pre>
songtest01.exe caused an Access Violation at location 77c46fa3 in module msvcrt.dll Reading from location 02480930.

Registers:
eax=02481030 ebx=003df6c8 ecx=000001c0 edx=00000000 esi=02480930 edi=003df7c0
eip=77c46fa3 esp=0022fcd0 ebp=0022fcd8 iopl=0         nv up ei pl nz ac po nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00200216

Call stack:
77C46FA3  msvcrt.dll:77C46FA3  memcpy
10005A67  almp3.dll:10005A67  decodeMP3
</pre><p>


[EDIT] Duh, I shouldn&#39;t post so quickly. It turns out mp3data has to stick around, so I made it global in the class and now delete in the destructor.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (BAF)</author>
		<pubDate>Sat, 17 Dec 2005 23:53:39 +0000</pubDate>
	</item>
</rss>
