TArray FindByPredicate causing access violation

Matt Boatswain
Sat, 29 Sep 2018 06:55:59 +0000
C++

Hey guys.

Maybe im tired and cant see whats causing this but the following is what code ive got.

I cannot work out why the FindByPredicate is causing an access violation.

bool ASMFactionBase::DoesObjectClassMeetResourceRequirements(TSubclassOf<UObject> ObjectClass)
{
	if (!ObjectClass)
	{
		return false;
	}

	if (FactionTechTree)
	{
		//Find the GraphNode that the ObjectClass exists on so that we can query what its resource requirements are.
		UTechTreeGraphNode* ObjectNode = *(FactionTechTree->AllNodes.FindByPredicate([&](UTechTreeGraphNode* InNode)
		{
			return InNode->NodeAssetObject->IsChildOf(ObjectClass);
		}));

		if (ObjectNode && ResourceManagerComponent)
		{
			TArray<ASMResourceTypeBase*> Resources = ResourceManagerComponent->GetResources();

			for (const TPair<TSubclassOf<ASMResourceTypeBase>, int32>& ResourceRequirement : ObjectNode->ResourceRequirements)
			{
				//Find out if the Resource exists in the ResourceManager, if it doesnt then we cant continue because we obviously dont have the required resource.
				ASMResourceTypeBase* ResourceFromResourceManager = *(Resources.FindByPredicate([&](ASMResourceTypeBase* InResource) // <--------------- Access Violation on this Line.
				{
					return InResource->IsA(ResourceRequirement.Key);
				}));

				//If we do have the required resource, then find out if we have enough of it.
				if (ResourceFromResourceManager)
				{
					if (ResourceRequirement.Value > ResourceFromResourceManager->ResourceAmount)
					{
						return false;
					}
				}
				else
				{
					return false;
				}
			}
		}
		else
		{
			return false;
		}
	}

	return true;
}

If there is someone that can point out a possible issue with this please do reply

If you need more information let me know, i hope the comments are enough.

Thanks.

7 posts - 1 participant