Im using munt with dosbox, when i was terminating dosbox mt32emu-qt would crash with the invalid pointer error.
Reviewing the source file for synth.cpp its clear the Synth class is trying to decontruct 3 instances. The error occurs on the 3rd. Its clear the delete operations are trying to free pointers that have garbage data for pointer values.
This can be fixed by initializing all the pointers to NULL and checking for NULL in the decontructor.
Synth::Synth
patchTempMemoryRegion = NULL;
rhythmTempMemoryRegion = NULL;
timbreTempMemoryRegion = NULL;
patchesMemoryRegion = NULL;
timbresMemoryRegion = NULL;
systemMemoryRegion = NULL;
displayMemoryRegion = NULL;
resetMemoryRegion = NULL;
paddedTimbreMaxTable = NULL;
void Synth::deleteMemoryRegions() {
if (patchTempMemoryRegion != NULL ) {
delete patchTempMemoryRegion;
patchTempMemoryRegion = NULL;
}
if (rhythmTempMemoryRegion != NULL ) {
delete rhythmTempMemoryRegion;
rhythmTempMemoryRegion = NULL;
}
if (timbreTempMemoryRegion != NULL ) {
delete timbreTempMemoryRegion;
timbreTempMemoryRegion = NULL;
}
if (patchesMemoryRegion != NULL ) {
delete patchesMemoryRegion;
patchesMemoryRegion = NULL;
}
if (timbresMemoryRegion != NULL ) {
delete timbresMemoryRegion;
timbresMemoryRegion = NULL;
}
if (systemMemoryRegion != NULL ) {
delete systemMemoryRegion;
systemMemoryRegion = NULL;
}
if (displayMemoryRegion != NULL ) {
delete displayMemoryRegion;
displayMemoryRegion = NULL;
}
if (resetMemoryRegion != NULL ) {
delete resetMemoryRegion;
resetMemoryRegion = NULL;
}
if (paddedTimbreMaxTable != NULL ) {
delete[] paddedTimbreMaxTable;
paddedTimbreMaxTable = NULL;
}
}
Edit: Attached the full call trace
This is also with the dosbox svn with the patch applied and svn munt. All compiled and running on 64 bit linux.
Diff:
Diff:
Thanks for reporting this.
Looks fixed as of commit d557f65ec8d