diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp index a67b4afe6f8..537966fe028 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp @@ -254,15 +254,13 @@ void OverlordContain::removeAllContained( Bool exposeStealthUnits ) return; } - const ContainedItemsList *fullList = getRedirectedContain()->getContainedItemsList(); - - Object *obj; - ContainedItemsList::const_iterator it; - it = (*fullList).begin(); - while( it != (*fullList).end() ) + // Use a safe iterator pattern to avoid iterator invalidation. + // Always get a fresh iterator from the beginning after each removal, + // similar to OpenContain::removeAllContained() + const ContainedItemsList *fullList; + while( (fullList = getRedirectedContain()->getContainedItemsList()) != NULL && !fullList->empty() ) { - obj = *it; - it++; + Object *obj = fullList->front(); removeFromContain( obj, exposeStealthUnits ); } } diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp index ce039ed6f84..69e9de4ba4f 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Contain/OverlordContain.cpp @@ -328,15 +328,13 @@ void OverlordContain::removeAllContained( Bool exposeStealthUnits ) return; } - const ContainedItemsList *fullList = getRedirectedContain()->getContainedItemsList(); - - Object *obj; - ContainedItemsList::const_iterator it; - it = (*fullList).begin(); - while( it != (*fullList).end() ) + // Use a safe iterator pattern to avoid iterator invalidation. + // Always get a fresh iterator from the beginning after each removal, + // similar to OpenContain::removeAllContained() + const ContainedItemsList *fullList; + while( (fullList = getRedirectedContain()->getContainedItemsList()) != NULL && !fullList->empty() ) { - obj = *it; - it++; + Object *obj = fullList->front(); removeFromContain( obj, exposeStealthUnits ); } }