쾌락없는 책임 (공부)/Unreal

[Unreal] GarbageCollection.cpp 에러, Invalid object in GC 에러

허스크 2022. 11. 5. 17:15
반응형
Fatal error: [File:D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\UObject\GarbageCollection.cpp] [Line: 1112] 
Invalid object in GC: 0x000008555dffe8a0, 
ReferencingObject: ZombieBase /Script/ProjectFA.Default__ZombieBase, 
ReferencingObjectClass: Class /Script/ProjectFA.ZombieBase, 
Property Name: MovingState, Offset: 1960, TokenIndex: 77​

개요

저 망할 오류가 계속해서 떠서 IDE에서 빌드를 해도 파일을 열 수 없는 상태가 있었습니다. 이를 해결한 과정을 올려 추후 비슷한 오류가 발생하는 분들에게 참고가 되었으면 합니다. 저는 시간 좀 걸렸는데 이거 보시는 분들은 금방 해결하셨음 하네요.

 

 

원인 분석 했지만 정확히는 모름..

일단 원인은 nullptr인 애들을 조작하려고 한 것입니다. 초기화가 제대로 되지 않아서 GC와 충돌이 있었던거 같습니다. 한번 원래 코드를 한번 보시죠.

void AZombieBase::BeginPlay()
{
	Super::BeginPlay();
	
	SetZombieState(MovingState);
    //...
}

void AZombieBase::SetZombieState(TObjectPtr<IIZombieState> State)
{
	// 여기 State가 nullptr 일수도 있다는 느낌인듯
	if(CurState)
		CurState->EndBehaviour(this);
	CurState = State;
	CurState->StartBehaviour(this);
}

이 코드를 통해서 빌드를 하면 오류가 계속 생기기에 SetZombieState에서 아래와 같은 체크 과정을 하나 넣어줬습니다.

void AZombieBase::SetZombieState(TObjectPtr<IIZombieState> State)
{
	if(State == nullptr)	return;

이런 뒤 빌드가 잘 되었습니다.

 

그런데 한번 더 빌드가 안되길래 인터페이스 멤버 포인터들에게서 UPROPERT를 제거해 줬습니다.

	TObjectPtr<class IIZombieState> CurState;
	TObjectPtr<IIZombieState> MovingState;
	TObjectPtr<IIZombieState> AttackingState;
반응형