Engine Crashes at CreateDefaultSubobject

Hello,

I can compile my code but when I place it in the game and run it. Whole editor crashes.

262519-3.png

This is the log:

Fatal error: [File:/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/CoreUObject/Private/UObject/Obj.cpp] [Line: 104] No object initializer found during construction. 0x00007efced8d7da1 libUE4Editor-SpawnTutorial-7506.so!ABarracks::BeginPlay() [/home/cagdas/Documents/Unreal Projects/SpawnTutorial/Source/SpawnTutorial/Barracks.cpp:21] 0x00007efd649f129d libUE4Editor-Engine.so!AActor::DispatchBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/Actor.cpp:3225] 0x00007efd65e35e48 libUE4Editor-Engine.so!AWorldSettings::NotifyBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/WorldSettings.cpp:251] 0x00007efd6517468c libUE4Editor-Engine.so!AGameStateBase::HandleBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameStateBase.cpp:176] 0x00007efd65dfda49 libUE4Editor-Engine.so!UWorld::BeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/World.cpp:3736] 0x00007efd6513ccd5 libUE4Editor-Engine.so!UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer*, FGameInstancePIEParameters const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameInstance.cpp:408] 0x00007efd5e8b95c0 libUE4Editor-UnrealEd.so!UEditorEngine::CreatePIEGameInstance(int, bool, bool, bool, bool, bool, float) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:3324] 0x00007efd5e8b1d59 libUE4Editor-UnrealEd.so!UEditorEngine::PlayInEditor(UWorld*, bool, FPlayInEditorOverrides) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:2449] 0x00007efd5e8a5964 libUE4Editor-UnrealEd.so!UEditorEngine::StartQueuedPlayMapRequest() [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:1265] 0x00007efd5e1d43ed libUE4Editor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/EditorEngine.cpp:1640] 0x00007efd5ec3f082 libUE4Editor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/UnrealEdEngine.cpp:400] 0x0000000000239256 UE4Editor!FEngineLoop::Tick() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp:3693] 0x0000000000241ad3 UE4Editor!GuardedMain(char16_t const*) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/Launch.cpp:176] 0x00007efd5cf50eba libUE4Editor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*)) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:245] 0x00007efd5c976b97 libc.so.6!__libc_start_main(+0xe6) 0x000000000022d029 UE4Editor!_start()

libUE4Editor-Core.so!FGenericPlatformMisc::RaiseException(unsigned int) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/GenericPlatform/GenericPlatformMisc.cpp:411]
libUE4Editor-Core.so!FUnixErrorOutputDevice::Serialize(char16_t const*, ELogVerbosity::Type, FName const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Unix/UnixErrorOutputDevice.cpp:56]
libUE4Editor-Core.so!FOutputDevice::LogfImpl(char16_t const*, ...) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Misc/OutputDevice.cpp:71]
libUE4Editor-Core.so!FDebug::AssertFailed(char const*, char const*, int, char16_t const*, ...) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Core/Private/Misc/AssertionMacros.cpp:417]
libUE4Editor-CoreUObject.so!UObject::CreateDefaultSubobject(FName, UClass*, UClass*, bool, bool, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/CoreUObject/Private/UObject/Obj.cpp:104]
libUE4Editor-SpawnTutorial-7506.so!ABarracks::BeginPlay() [/home/cagdas/Documents/Unreal Projects/SpawnTutorial/Source/SpawnTutorial/Barracks.cpp:21]
libUE4Editor-Engine.so!AActor::DispatchBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/Actor.cpp:3225]
libUE4Editor-Engine.so!AWorldSettings::NotifyBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/WorldSettings.cpp:251]
libUE4Editor-Engine.so!AGameStateBase::HandleBeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameStateBase.cpp:176]
libUE4Editor-Engine.so!UWorld::BeginPlay() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/World.cpp:3736]
libUE4Editor-Engine.so!UGameInstance::StartPlayInEditorGameInstance(ULocalPlayer*, FGameInstancePIEParameters const&) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Engine/Private/GameInstance.cpp:408]
libUE4Editor-UnrealEd.so!UEditorEngine::CreatePIEGameInstance(int, bool, bool, bool, bool, bool, float) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:3324]
libUE4Editor-UnrealEd.so!UEditorEngine::PlayInEditor(UWorld*, bool, FPlayInEditorOverrides) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:2449]
libUE4Editor-UnrealEd.so!UEditorEngine::StartQueuedPlayMapRequest() [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/PlayLevel.cpp:1265]
libUE4Editor-UnrealEd.so!UEditorEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/EditorEngine.cpp:1640]
libUE4Editor-UnrealEd.so!UUnrealEdEngine::Tick(float, bool) [/home/cagdas/programs/UnrealEngine/Engine/Source/Editor/UnrealEd/Private/UnrealEdEngine.cpp:400]
UE4Editor!FEngineLoop::Tick() [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/LaunchEngineLoop.cpp:3693]
UE4Editor!GuardedMain(char16_t const*) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Launch/Private/Launch.cpp:176]
libUE4Editor-UnixCommonStartup.so!CommonUnixMain(int, char**, int (*)(char16_t const*)) [/home/cagdas/programs/UnrealEngine/Engine/Source/Runtime/Unix/UnixCommonStartup/Private/UnixCommonStartup.cpp:245]
libc.so.6!__libc_start_main(+0xe6)
UE4Editor!_start()

As you can see it mentions one of my classes/line which has CreateDefaultSubobject. I’ve searched it on the internet and found that I can only call it in the constructor. But I am already calling it in the constructor. And it compiles just fine. I don’t know what causes this error at the runtime.

This is my .h and .cpp

// Fill out your copyright notice in the Description page of Project Settings.


#include "Barracks.h"


// Sets default values
ABarracks::ABarracks()
{
 	// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

}

// Called when the game starts or when spawned
void ABarracks::BeginPlay()
{
	Super::BeginPlay();

	BuildingMesh = CreateDefaultSubobject<UStaticMeshComponent>("BuildingMesh");

	SpawnPoint = CreateDefaultSubobject<UParticleSystemComponent>("SpawnPoint");

	SpawnInterval = 10;

	auto MeshAsset =  ConstructorHelpers::FObjectFinder<UStaticMesh>(TEXT("Static Mesh '/Engine/BasicShapes/Cube.Cube'"));

	if (MeshAsset.Object != nullptr) {
		BuildingMesh->SetStaticMesh(MeshAsset.Object);
		BuildingMesh->SetCollisionProfileName(UCollisionProfile::Pawn_ProfileName);
	}

	auto ParticalSystem = ConstructorHelpers::FObjectFinder<UParticleSystem>(TEXT("ParticalSystem '/Engine/Tutorial/SubEditors/TutorialAssets/TutorialParticleSystem'"));

	if (ParticalSystem.Object != nullptr) {
		SpawnPoint->SetTemplate(ParticalSystem.Object);
        
	}


	SpawnPoint->SetRelativeScale3D(FVector(0.5, 0.5, 05));
	UnitToSpawn =  AMyCharacter::StaticClass();
}

void ABarracks::SpawnUnit()
{
	FVector SpawnLocation = SpawnPoint->GetComponentLocation();
	GetWorld()->SpawnActor(UnitToSpawn, &SpawnLocation);
}

void ABarracks::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
	Super::EndPlay(EndPlayReason);
	GetWorld()->GetTimerManager().ClearTimer(SpawnTimerHandle);
}

// Called every frame
void ABarracks::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

}

.h file:

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Runtime/Engine/Classes/Engine/CollisionProfile.h"
#include "Runtime/Engine/Classes/Particles/ParticleSystemComponent.h"
#include "MyCharacter.h"
#include "Barracks.generated.h"

UCLASS()
class SPAWNTUTORIAL_API ABarracks : public AActor
{
	GENERATED_BODY()
    
public:
    ABarracks();
    virtual void BeginPlay() override;
    virtual void Tick (float DeltaSeconds) override;

	UPROPERTY()
	UStaticMeshComponent* BuildingMesh;

	UPROPERTY()
	UParticleSystemComponent* SpawnPoint;

	UPROPERTY()
	UClass* UnitToSpawn;

	UPROPERTY()
	float SpawnInterval;

	UFUNCTION()
	void SpawnUnit();

	UFUNCTION()
	void EndPlay(const EEndPlayReason::Type EndPlayReason) override;

	UPROPERTY()
	FTimerHandle SpawnTimerHandle;
	
};

Is this a bug related to UE4 or is there something wrong with my code. Even my code has issues I think it doesn’t makes sense to crash the whole Editor. I am running on Linux Mint btw. Self compiled. 4.21

Thank you for your help.

ABarracks::ABarracks() is your constructor. You are calling it from within BeginPlay(), which is not possible.

The editor will always crash when you try to retrieve an empty pointer. It’s your job to always check if a pointer is valid before trying to use it with.

In the old days it would have crashed your whole Operating system! We’re lucky unreal catches it and protects your pc from locking.

The log you posted without reading says that Barracks.cpp:21 caused the crash.

looking there, I can see you’re trying to access BuildingMesh while it’s still empty. And as I said before, that’s what crashes the engine.

You should create the components in your Constructor: this one ABarracks::ABarracks()

also: UStaticMeshComponent in your .h is not forward declared: class UStaticMeshComponent; right round line 11 after the includes and before your class declaration. same with UParticleSystemComponent