Get variable from external class

I have a variable in the GameMode which the PlayerController Gets and the Character can get this variable from the PlayerController but i keep getting crashes

the crash log is
Unhandled Exception: EXCEPTION_ACCESS_VIOLATION writing address 0x000006b4

GameMode .h

	UPROPERTY(EditAnywhere)
		int32 GMVariable;

	int32 GetGamemodeVariable();

GameMode cpp

int32 AShooterGameMode::GetGamemodeVariable()
{
	return GMVariable;
}

PlayerController .h

	class AShooterGameMode* GetGameMode;

	UPROPERTY()
		int32 SelectedVariable;

	UFUNCTION()
		int32 PCVariable();

PlayerController cpp

int32 AShooterPlayerController::PCVariable()
{
	SelectedVariable = GetGamemode->GetGamemodeVariable();

	return SelectedVariable;
}

Character .h

	class AShooterPlayerController* ShooterPC;

	UPROPERTY()
		int32 CharacterVariable;

Character cpp

	void AShooterCharacter::GetPCVariable()
	{
		CharacterVariable = ShooterPC->PCVariable();
	}

How are you setting GetGamemode and ShooterPC? Are you protecting your pointers?

this is all the related code

how would i set GetGamemode and ShooterPC and how can i protect the pointers

this is all the related code

No, it’s not all the related code.
What is ShooterPC? I assume is the player controller. So, where are you setting its value? The same for the game mode.

how would i set GetGamemode and ShooterPC

One of the ways to get the player controller:

 AShooterPlayerController* ShooterPC = Cast<AShooterPlayerController>(UGameplayStatics::GetPlayerController(GetWorld(), 0));

how can i protect the pointers

Example:

if (ShooterPC)
{         
    CharacterVariable = ShooterPC->PCVariable();
}

Thanks this helped heaps

This is how i am currently doing it and its working

	if (AShooterGameMode* GM = Cast<AShooterGameMode>(UGameplayStatics::GetGameMode(GetWorld())))
	{
		if (GM)
		{
			CurrentVariable = GMM->GetVariable();

			FString IntAsString = FString::FromInt(CurrentVariable);

			GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Green, IntAsString);
		}
	}

Remove the first if. It’s useless. Just:

AShooterGameMode* GM = Cast<AShooterGameMode>(UGameplayStatics::GetGameMode(GetWorld());
if (GM) ...

thanks for that optimization advise