From: ehofman Date: Tue, 5 Jul 2005 18:53:16 +0000 (+0000) Subject: Another update, the previous one could crash if you leave the surrounding tiles ... X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=6b6a27e8498ec2fa4b4a990691527ae94d358cd2;p=simgear.git Another update, the previous one could crash if you leave the surrounding tiles (try Set aircraft in air and choose a distant airport). --- diff --git a/simgear/scene/model/shadowvolume.cxx b/simgear/scene/model/shadowvolume.cxx index ed1b85a8..844ddddb 100644 --- a/simgear/scene/model/shadowvolume.cxx +++ b/simgear/scene/model/shadowvolume.cxx @@ -786,10 +786,10 @@ SGShadowVolume::SGShadowVolume() : SGShadowVolume::~SGShadowVolume() { SceneryObject_map::iterator iSceneryObject; - for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); ) { + for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); iSceneryObject++ ) { delete iSceneryObject->second; - sceneryObjects.erase( iSceneryObject ); } + sceneryObjects.clear(); } void SGShadowVolume::init(SGPropertyNode *sim_rendering_options) { @@ -815,14 +815,15 @@ void SGShadowVolume::init(SGPropertyNode *sim_rendering_options) { void SGShadowVolume::startOfFrame(void) { } void SGShadowVolume::deleteOccluderFromTile(ssgBranch *tile) { - SceneryObject_map::iterator iSceneryObject; - for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); ) { + SceneryObject_map::iterator iSceneryObject, iPrevious; + iPrevious = sceneryObjects.begin(); + for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); iSceneryObject++ ) { if( iSceneryObject->second->tile == tile ) { delete iSceneryObject->second; sceneryObjects.erase( iSceneryObject ); + iSceneryObject = iPrevious; } - else - iSceneryObject++; + iPrevious = iSceneryObject; } }