Allegro.cc - Online Community

Allegro.cc Forums » Programming Questions » ALMP3 Crash

This thread is locked; no one can reply to it. rss feed Print
ALMP3 Crash
BAF
Member #2,981
December 2002
avatar

Any ideas why almp3 crashes (on the poll of the mp3, in the decode function)? Here is the relevant mp3 code:

1class MP3Play : public Song
2{
3 //IMPLEMENT_SONGTYPE(WavePlay)
4 public:
5 static MusicEngine::Song *Factory(const string& filename) { return new MP3Play(filename); }
6
7 public:
8 ALMP3_MP3 *mp3;
9
10 MP3Play(const string& filename) : mp3(NULL)
11 {
12 printf("Loading %s\n", filename.c_str());
13 PACKFILE *mp3f = pack_fopen(filename.c_str(), "r");
14 if(!mp3f)
15 printf("hmmmmmm\n");
16 int size = file_size(filename.c_str());
17 char *mp3data = new char[size];
18 size = pack_fread(mp3data, size, mp3f);
19 pack_fclose(mp3f);
20
21 if((mp3 = almp3_create_mp3(mp3data, size)) == NULL)
22 printf("almp3_create_mp3 failed\n");
23
24 delete mp3data;
25 }
26
27 ~MP3Play()
28 {
29 almp3_destroy_mp3(mp3);
30 mp3 = NULL;
31 }
32
33 void Play()
34 {
35 if(mp3)
36 {
37 printf("Playing...\n");
38 if(almp3_play_ex_mp3(mp3, 32768, 255, 127, 1000, 0) == ALMP3_PLAY_BUFFERTOOSMALL)
39 printf("ALMP3_PLAY_BUFFERTOOSMALL\n");
40 }
41 }
42
43 void Stop()
44 {
45 almp3_stop_mp3(mp3);
46 }
47
48 bool Tick()
49 {
50 printf("\rPlaying mp3");
51
52 int poll = 0;
53 if(mp3)
54 poll = almp3_poll_mp3(mp3);
55
56 if(poll == ALMP3_POLL_PLAYJUSTFINISHED || poll == ALMP3_POLL_NOTPLAYING || poll == ALMP3_POLL_INTERNALERROR || !mp3)
57 return false;
58 return true;
59 }
60};

and the not-so-helpful(tm) backtrace:

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

[EDIT] Duh, I shouldn'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.

Go to: