From a28fe51ccfcb5a9432b1eebf67e729dd45d7d3d6 Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Tue, 27 Nov 2012 21:02:32 +0100 Subject: [PATCH] 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). --- src/AIModel/AIFlightPlan.cxx | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) 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, -- 2.39.5