Crash on Removing an Object from an Array

In my AI class it has an array of UAIGoal objects, every 5 ticks or so it goes through and updates the weight of each one based on specific conditions, then it calls the ExecuteGoal function in the one with the highest weight. This works fine. However, every tick, I loop through the goals array and remove the first one I find that has been completed. I only do one per loop because I am afraid that Remove() causes the indexes to change mid loop. Upon removing a completed goal, I get a crash and the following text. It doesn’t matter what kind of goal it is or what it has the AI do.


Assertion failed: ((&Item) < GetTypedData()) || ((&Item) >= GetTypedData()+ArrayMax) [File:F:\GitHub\UnrealEngine\Engine\Source\Runtime\Core\Public\Containers\Array.h] [Line: 1292]

Stack:
FWindowsPlatformStackWalk::StackWalkAndDump() 0xe7daebf6 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\private\windows\windowsplatformstackwalk.cpp:177] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Core.dll]
FDebug::AssertFailed() 0xe7c4a835 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\private\misc\outputdevice.cpp:203] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Core.dll]
TArray<UAIGoal * __ptr64,FDefaultAllocator>::Remove() 0xde1ee6fa + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\public\containers\array.h:1294] [in F:\GitHub\UnrealProjects\VRShooter\Binaries\Win64\UE4Editor-VRShooter.dll]
AVRAIController::Tick() 0xde1f0ceb + 0 bytes [File=f:\github\unrealprojects\vrshooter\source\vrshooter\vraicontroller.cpp:144] [in F:\GitHub\UnrealProjects\VRShooter\Binaries\Win64\UE4Editor-VRShooter.dll]
FActorTickFunction::ExecuteTick() 0xe572ca48 + 30 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private\actor.cpp:191] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
FTickTaskSequencer::FTickFunctionTask::DoTask() 0xe5db9d56 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private	icktaskmanager.cpp:316] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
TGraphTask<FTickTaskSequencer::FTickFunctionTask>::ExecuteTask() 0xe5dc44dd + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\public\async	askgraphinterfaces.h:637] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
FTaskThread::ProcessTasks() 0xe7b397b2 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\private\async	askgraph.cpp:329] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Core.dll]
FTaskThread::ProcessTasksUntilQuit() 0xe7b3996d + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\private\async	askgraph.cpp:173] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Core.dll]
FTaskGraphImplementation::WaitUntilTasksComplete() 0xe7b4e2da + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\core\private\async	askgraph.cpp:865] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Core.dll]
FTaskGraphInterface::WaitUntilTaskCompletes() 0xe5de91a9 + 17 bytes [File=f:\github\unrealengine\engine\source\runtime\core\public\async	askgraphinterfaces.h:182] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
FTickTaskSequencer::ReleaseTickGroup() 0xe5dd8090 + 83 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private	icktaskmanager.cpp:181] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
FTickTaskManager::RunTickGroup() 0xe5dda027 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private	icktaskmanager.cpp:714] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
UWorld::RunTickGroup() 0xe5a78776 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private\leveltick.cpp:691] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
UWorld::Tick() 0xe5a7f053 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\engine\private\leveltick.cpp:1104] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-Engine.dll]
UEditorEngine::Tick() 0xe3d53026 + 0 bytes [File=f:\github\unrealengine\engine\source\editor\unrealed\private\editor.cpp:1199] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-UnrealEd.dll]
UUnrealEdEngine::Tick() 0xe412e956 + 0 bytes [File=f:\github\unrealengine\engine\source\editor\unrealed\private\unrealedengine.cpp:252] [in F:\GitHub\UnrealEngine\Engine\Binaries\Win64\UE4Editor-UnrealEd.dll]
FEngineLoop::Tick() 0x3ff07092 + 0 bytes [File=f:\github\unrealengine\engine\source\runtime\launch\private\launchengineloop.cpp:2084] in F:\GitHub\UnrealEngine\Engine\Binar

I think calling ConditionalBeginDestroy(); on the goals that are completed may be working.