From: ThorstenB Date: Tue, 27 Nov 2012 20:02:32 +0000 (+0100) Subject: Fix FGAIFlightPlan waypoint issues X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=a28fe51ccfcb5a9432b1eebf67e729dd45d7d3d6;p=flightgear.git Fix FGAIFlightPlan waypoint issues Iterator must be reset after clearing waypoint list. Deleting "*waypoint.end()" doesn't delete the last waypoint (end()-1 does - it is never actually used though). --- diff --git a/src/AIModel/AIFlightPlan.cxx b/src/AIModel/AIFlightPlan.cxx index f2e5421d7..5699a620c 100644 --- a/src/AIModel/AIFlightPlan.cxx +++ b/src/AIModel/AIFlightPlan.cxx @@ -286,21 +286,21 @@ FGAIWaypoint* const FGAIFlightPlan::getNextWaypoint( void ) const void FGAIFlightPlan::IncrementWaypoint(bool eraseWaypoints ) { - if (eraseWaypoints) + if (eraseWaypoints) { - if (wpt_iterator == waypoints.begin()) - wpt_iterator++; - else - { - delete *(waypoints.begin()); - waypoints.erase(waypoints.begin()); - wpt_iterator = waypoints.begin(); - wpt_iterator++; - } + if (wpt_iterator == waypoints.begin()) + wpt_iterator++; + else + if (!waypoints.empty()) + { + delete *(waypoints.begin()); + waypoints.erase(waypoints.begin()); + wpt_iterator = waypoints.begin(); + wpt_iterator++; + } } - else - wpt_iterator++; - + else + wpt_iterator++; } void FGAIFlightPlan::DecrementWaypoint(bool eraseWaypoints ) @@ -310,9 +310,10 @@ void FGAIFlightPlan::DecrementWaypoint(bool eraseWaypoints ) if (wpt_iterator == waypoints.end()) wpt_iterator--; else + if (!waypoints.empty()) { - delete *(waypoints.end()); - waypoints.erase(waypoints.end()); + delete *(waypoints.end()-1); + waypoints.erase(waypoints.end()-1); wpt_iterator = waypoints.end(); wpt_iterator--; } @@ -397,6 +398,7 @@ void FGAIFlightPlan::deleteWaypoints() for (wpt_vector_iterator i = waypoints.begin(); i != waypoints.end();i++) delete (*i); waypoints.clear(); + wpt_iterator = waypoints.begin(); } // Delete all waypoints except the last,