Accessing a static variable in game instance crashes the game in packaged version (and standalone mode)

Hello, my game runs fine when playing in editor but crashes in packaged version and standalone mode. This is the crash summary:

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xffffffffffffffff

UnrealEditor_CoreUObject!UStruct::IsChildOf() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\Class.cpp:2202]
UnrealEditor_CharacterSelector_1!ACharacterSelectorMode_2::ACharacterSelectorMode_2() [C:\Users\pc\Documents\UnrealProjects\CafeEntrance_2\Plugins\CharacterSelector_1\Source\CharacterSelector_1\Private\CharacterSelectorMode_2.cpp:28]
UnrealEditor_CoreUObject!StaticConstructObject_Internal() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\UObjectGlobals.cpp:3522]
UnrealEditor_Engine!NewObject<AActor>() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Public\UObject\UObjectGlobals.h:1405]
UnrealEditor_Engine!UWorld::SpawnActor() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelActor.cpp:658]
UnrealEditor_Engine!UWorld::SpawnActor() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\LevelActor.cpp:438]
UnrealEditor_Engine!UGameInstance::CreateGameModeForURL() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameInstance.cpp:1382]
UnrealEditor_Engine!UWorld::SetGameMode() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\World.cpp:4702]
UnrealEditor_Engine!UEngine::LoadMap() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:14120]
UnrealEditor_Engine!UEngine::Browse() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:13412]
UnrealEditor_Engine!UEngine::TickWorldTravel() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\UnrealEngine.cpp:13610]
UnrealEditor_Engine!UGameEngine::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\GameEngine.cpp:1820]
UnrealEditor!FEngineLoop::Tick() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\LaunchEngineLoop.cpp:5215]
UnrealEditor!GuardedMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Launch.cpp:183]
UnrealEditor!GuardedMainWrapper() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:147]
UnrealEditor!LaunchWindowsStartup() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:283]
UnrealEditor!WinMain() [D:\build\++UE5\Sync\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp:330]
UnrealEditor!__scrt_common_main_seh() [d:\a01\_work\6\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288]
kernel32
ntdll

The summary shows the line 28 of my CharacterSelectorMode_2.cpp. These are my codes without my (not English) comments and the line should be if (SelectedCharacterClass->IsValidLowLevel()) (I marked below):

// CharacterSelector_1
#include "CharacterSelectorMode_2.h" // ACharacterSelectorMode_2
#include "CharacterSelectorGameInstance_1.h" // UCharacterSelectorGameInstance_1
#include "CharacterSelectorAlias_1.h" // CharacterClass_t

// CoreUObject
#include "UObject/ObjectPtr.h" // TObjectPtr
#include "Templates/SubclassOf.h" // TSubclassOf

// engine
#include "Kismet/GameplayStatics.h" // UGameplayStatics

// constructor
ACharacterSelectorMode_2::ACharacterSelectorMode_2(const FObjectInitializer& ObjectInitializer)
	: Super(ObjectInitializer)
{
	const TObjectPtr<UCharacterSelectorGameInstance_1>& SelectorGameInstance{
		Cast<UCharacterSelectorGameInstance_1>(UGameplayStatics::GetGameInstance(GetWorld())) };

	if (SelectorGameInstance->IsValidLowLevel())
	{
		const TSubclassOf<CharacterClass_t>& SelectedCharacterClass{ SelectorGameInstance->SelectedCharacterClass };

		// THIS LINE CRASHES
		if (SelectedCharacterClass->IsValidLowLevel())
		{
			DefaultPawnClass = SelectedCharacterClass;
		}
	}
}

The SelectedCharacterClass is (marked) in the CharacterSelectorGameInstance_1.h:

#pragma once

// engine
#include "Engine/GameInstance.h" // UGameInstance

// CharacterSelector_1
#include "CharacterSelectorAlias_1.h" // CharacterClass_t

//
#include "CharacterSelectorGameInstance_1.generated.h"

UCLASS()
class CHARACTERSELECTOR_1_API UCharacterSelectorGameInstance_1 : public UGameInstance
{
	GENERATED_BODY()

public:
	// THIS IS IT
	static inline TSubclassOf<CharacterClass_t> SelectedCharacterClass{ CharacterClass_t::StaticClass() };
};

In short, the game starts at a level, then I open another level which uses the ACharacterSelectorMode_2 game mode.
This is the crash report files:
UECC-Windows-0CD6D7CC4E026419F22491A0B4A550CD_0000.zip (164.6 KB)

When you using static variable from other class there is no guarantee that variable has been initialized. Usually it is problem if you call static variable before reaches main function.

Try initialize that variable outside of class:
TSubclassOf<CharacterClass_t> UCharacterSelectorGameInstance_1 ::SelectedCharacterClass = CharacterClass_t::StaticClass() ;

Thanks for the suggestion, I will also try to move that static variable to the game mode class itself.

The solution is to use blueprint instead.