Just solved this problem on my end. Surprisingly i was also doing http requests, so i guess we had the similar setup:
//Backend.h:
UCLASS()
class TSARSTVA_API UBackend : public UObject
{
GENERATED_BODY()
public:
UBackend();
FString RequestAddress;
FString RequestPort;
void MakeRequest();
};
// mygamemode.h
UCLASS()
class TSARSTVA_API AMyGameMode : public AGameMode
{
GENERATED_BODY()
public:
AMyGameMode ();
UBackend* Backend = nullptr;
void BeginPlay() override;
};
//mygamemode.cpp
AMyGameMode::AMyGameMode()
{
Backend = CreateDefaultSubobject<UBackend>(TEXT("Backend"));
}
void AMyGameMode::BeginPlay()
{
Super::BeginPlay();
FTimerHandle _;
GetWorld()->GetTimerManager().SetTimer(_, [this](){Backend->MakeRequest()}, 3, true);
}
and the reason was that garbage collector was killing my UBackend right after creation, corrupting a few symbols in the strings, but without a crash. So you just have to mark your UBackend* as UPROPERTY() to avoid situation where uobject have no tracked references in the ue system