diff --git a/src/audio/sfx_manager.cpp b/src/audio/sfx_manager.cpp index 27347bd9d..220b6b5b8 100644 --- a/src/audio/sfx_manager.cpp +++ b/src/audio/sfx_manager.cpp @@ -71,12 +71,15 @@ SFXManager::~SFXManager() { delete (*i); } // for i in m_all_sfx + m_all_sfx.clear(); //the unbuffer all of the buffers for(unsigned int ii = 0; ii != m_sfx_buffers.size(); ii++) { alDeleteBuffers(1, &(m_sfx_buffers[ii])); } + + sfx_manager = NULL; } // ~SFXManager //---------------------------------------------------------------------------- @@ -352,12 +355,14 @@ void SFXManager::deleteSFX(SFXBase *sfx) { std::vector<SFXBase*>::iterator i; i=std::find(m_all_sfx.begin(), m_all_sfx.end(), sfx); - delete sfx; + if(i==m_all_sfx.end()) { fprintf(stderr, "SFXManager::deleteSFX : Warning: sfx not found in list.\n"); return; } + + delete sfx; m_all_sfx.erase(i); diff --git a/src/challenges/unlock_manager.cpp b/src/challenges/unlock_manager.cpp index 5472e813b..2975cc10a 100644 --- a/src/challenges/unlock_manager.cpp +++ b/src/challenges/unlock_manager.cpp @@ -128,7 +128,9 @@ UnlockManager::UnlockManager() UnlockManager::~UnlockManager() { save(); - sfx_manager->deleteSFX(m_locked_sound); + + // sfx_manager is destroyed before UnlockManager is, so SFX will be already deleted + // sfx_manager->deleteSFX(m_locked_sound); } // ~UnlockManager //-----------------------------------------------------------------------------