Find path runtime ERR

I use this code to find actor’s turn point in his path FindPathSync Finds only 2 points - Programming & Scripting - Epic Developer Community Forums

FPathFindingQuery Query;
		FAIMoveRequest MoveReq(destination);
		MoveReq.SetUsePathfinding(true);

		bool bValidQuery = ((AAIController*)viking->GetController())->PreparePathfinding(MoveReq, Query);

		if (bValidQuery)
		{
			const FNavAgentProperties navAgetProp = FNavAgentProperties(34, 176);

			UNavigationSystem* NavSys = UNavigationSystem::GetCurrent(());
			FPathFindingResult PathResult;
			

			PathResult = NavSys->FindPathSync(navAgetProp, Query);
			PathResult.Path.Get()->CastPath<>()->PerformStringPulling(viking->GetActorLocation(), destination);

			for (int i = 1; i < PathResult.Path->GetPathPoints().Num(); i++)
			{
				Result.AddUnique(PathResult.Path->GetPathPoints()[i].Location);
			}
		}

The problem is that the engine crashes when destination is in unreachable point which the engine cannot build valid path for it :


Here is the crash window:

MachineId:80046BB240F2576A6B7181B41DEBFE72
EpicAccountId:986026d98d7e497fae05cf1844d2919b

Access violation - code c0000005
(first/second chance not available)

“”

UE4Editor_Navmesh!dtNavMeshQuery::findStraightPath()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\navmesh\private\detour\detournavmeshquery.cpp:2160]
UE4Editor_Engine!FPImplRecastNavMesh::FindStraightPath()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\ai\navigation\pimplrecastnavmesh.cpp:1084]
UE4Editor_Engine!::PerformStringPulling()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\ai\navigation\navigationpath.cpp:458]
UE4Editor_ANordicTale!AVikingWalkGroup::SearchTurnPoints()
[c:\users\udi\documents\unreal
projects\anordictale\source\anordictale\vikingwalkgroup.cpp:182]
UE4Editor_ANordicTale!AVikingWalkGroup::Tick()
[c:\users\udi\documents\unreal
projects\anordictale\source\anordictale\vikingwalkgroup.cpp:35]
UE4Editor_Engine!AActor::TickActor()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\actor.cpp:670]
UE4Editor_Engine!FActorTickFunction::ExecuteTick()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\actor.cpp:105]
UE4Editor_Engine!FTickTaskSequencer::FTickFunctionTask::DoTask()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\ticktaskmanager.cpp:113]
UE4Editor_Engine!TGraphTask::ExecuteTask()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\public\async\taskgraphinterfaces.h:753]
UE4Editor_Core!FTaskThread::ProcessTasks()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\async\taskgraph.cpp:430]
UE4Editor_Core!FTaskThread::ProcessTasksUntilQuit()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\async\taskgraph.cpp:273]
UE4Editor_Core!FTaskGraphImplementation::WaitUntilTasksComplete()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\core\private\async\taskgraph.cpp:991]
UE4Editor_Engine!FTickTaskSequencer::ReleaseTickGroup()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\ticktaskmanager.cpp:243]
UE4Editor_Engine!FTickTaskManager::RunTickGroup()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\ticktaskmanager.cpp:643]
UE4Editor_Engine!UWorld::RunTickGroup()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\leveltick.cpp:697]
UE4Editor_Engine!UWorld::Tick()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\engine\private\leveltick.cpp:1185]
UE4Editor_UnrealEd!UEditorEngine::Tick()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\editorengine.cpp:1339]
UE4Editor_UnrealEd!UUnrealEdEngine::Tick()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\editor\unrealed\private\unrealedengine.cpp:366]
UE4Editor!FEngineLoop::Tick()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\launchengineloop.cpp:2359]
UE4Editor!GuardedMain()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\launch.cpp:142]
UE4Editor!GuardedMainWrapper()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\windows\launchwindows.cpp:126]
UE4Editor!WinMain()
[d:\buildfarm\buildmachine_++depot+ue4-releases+4.8\engine\source\runtime\launch\private\windows\launchwindows.cpp:200]

It’s controlled crash, it a assert fail, m_nav is null which is set on init(), so it might be internal bug

https://github.com/EpicGames/UnrealEngine/blob/4.8/Engine/Source/Runtime/Navmesh/Private/Detour/DetourNavMeshQuery.cpp#L2158

One thing that strikes me is that you’re using PathResult blindly without any conditions checking if it’s any good. This in general is not a good practice. Can you see if that’s the case here?

Cheers,

–mieszko

You right, I have added check with IsSuccessful() and now the runtime error does not appear anymore. Thank you for pointing this out.