쾌락없는 책임 (공부)/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;
반응형