- Platform : Win32
- Language : C++
I get an error if I leave the program running for a while (~10 min).
Unhandled exception at 0x10003fe2 in ImportTest.exe: 0xC0000005: Access violation reading location 0x003b1000.
I think it could be a memory leak but I don’t know how to find that out.
Im also unable to ‘free()‘ memory because it always causes (maybe i shouldn’t be using free() on variables) :
Unhandled exception at 0x76e81f70 in ImportTest.exe: 0xC0000005: Access violation reading location 0x0fffffff.
at that stage the program isn’t doing anything and it is just waiting for user input
dllHandle = LoadLibrary(L"miniFMOD.dll");
playSongPtr = (playSongT)GetProcAddress(dllHandle,"SongPlay");
loadSongPtr = (loadSongT)GetProcAddress(dllHandle,"SongLoadFromFile");
int songHandle = loadSongPtr("FILE_PATH");
// ... {just output , couldn't cause errors}
playSongPtr(songHandle);
getch(); // that is where it causes an error if i leave it running for a while
Edit 2:
playSongPtr();
causes the problem. but i don’t know how to fix it
I think it’s pretty clear that your program has a bug. If you don’t know where to start looking, a useful technique is “divide and conquer”.
Start with your program in a state where you can cause the exception to happen. Eliminate half your code, and try again. If the exception still happens, then you’ve got half as much code to look through. If the exception doesn’t happen, then it might have been related to the code you just removed.
Repeat the above until you isolate the problem.
Update: You say “at that stage the program isn’t doing anything” but clearly it is doing something (otherwise it wouldn’t crash). Is your program a console mode program? If so, what function are you using to wait for user input? If not, then is it a GUI mode program? Have you opened a dialog box and are waiting for something to happen? Have you got any Windows timers running? Any threads?
Update 2: In light of the small snippet of code you posted, I’m pretty sure that if you try to remove the call to the
playSongPtr(songHandle)function, then your problem is likely to go away. You will have to investigate what the requirements are for “miniFMOD.dll”. For example, that DLL might assume that it’s running in a GUI environment instead of a console program, and may do things that don’t necessarily work in console mode. Also, in order to do anything in the background (including playing a song), that DLL probably needs to create a thread to periodically load the next bit of the song and queue it in the play buffer. You can check the number of threads being created by your program in Task Manager (or better, Process Explorer). If it’s more than one, then there are other things going on that you aren’t directly controlling.