[Closed]Error with weapon

Hello, i need some help with C++.
Im trying to make a weapon for character.

Code:

 FVector AEvilRogues_Weapon::GetAdjustedAim() const
{
	APlayerController* const PlayerController = Instigator ? Cast<APlayerController>(Instigator->Controller) : NULL;
	FVector FinalAim = FVector::ZeroVector;
	// If we have a player controller use it for the aim
	if (PlayerController)
	{
		FVector CamLoc;
		FRotator CamRot;
		PlayerController->GetPlayerViewPoint(CamLoc, CamRot);
		FinalAim = CamRot.Vector();
	}
	return FinalAim;
}

void AEvilRogues_Weapon::SetOwningPawn(AEvilRoguesCharacter* NewOwner)
{
	if (NewOwner)
	{

		if (MyPawn != NewOwner)
		{
			Instigator = NewOwner;
			MyPawn = NewOwner;
			// net owner for RPC calls
			//SetOwner(NewOwner);
		}
	}
}

void AEvilRogues_Weapon::FireWeapon()
{
	if (MyPawn)
	{
		FVector CameraLoc;
		FRotator CameraRot;

		FVector_NetQuantizeNormal ShootDir = GetAdjustedAim();
		FVector Origin = Instigator->GetActorLocation() + FVector(0, 1, 0);
		FTransform SpawnTM(ShootDir.Rotation(), Origin);

		UWorld* const World = GetWorld();
		FActorSpawnParameters SpawnParams;
		SpawnParams.Owner = this;
		SpawnParams.Instigator = Instigator;
		AEvilRogues_Projectile* Projectile = World->SpawnActor<AEvilRogues_Projectile>(ProjectileClass, MyPawn->GetActorLocation(), MyPawn->GetActorRotation(), SpawnParams);
		if (Projectile)
		{
			FVector const LaunchDir = MyPawn->GetViewRotation().Vector();
			Projectile->InitVelocity(LaunchDir);
		}
	}
}

But i had a error:

Unhandled exception at 0x000007FF6F00BB43 (UE4Editor-EvilRogues.dll) in UE4Editor.exe: 0xC0000005: Access violation reading location 0x0000000000000320.

How can i fix it?

That address looks like something tried to call a virtual function with a null pointer. What line does the crash happen on?

Hmm, is the ‘this’ pointer null when it crashes?

  1. if (MyPawn)
    its strange, but VS show that line

yes. you right.

How i can fix error? :slight_smile:

That would depend on where AEvilRogues_Weapon::FireWeapon was being called.

You basically have a null AEvilRogues_Weapon pointer, so you either need to add a null check, or make sure you set it to a valid instance.

If the AEvilRogues_Weapon pointer is contained within AEvilRoguesCharacter, you could probably set the pointer in AEvilRogues_Weapon::SetOwningPawn.

Thanks for attention :slight_smile: