6

Problem:

When I use std::stringstream in Unreal Engine on Android, I get a crash when running the app on the phone.

Note:

Running the app on my Desktop does not crash.

How to reproduce:

  • Install Unreal Engine 5.6

  • In the Unreal editor, go to File -> New Project

  • Select First Person and C++

  • Add this code somewhere it gets executed:

    std::stringstream ss{};
    ss << "someLongStringToPreventShortStringOptimization";
    

    This also crashes with the same error:

    std::string{} + "someLongStringToPreventShortStringOptimization";
    

    This runs fine:

    std::string{"someLongStringToPreventShortStringOptimization"};
    
  • Launch on your Android phone

When I do this, I get following crash:

LogPlayLevel: Error: UAT: 08-01 13:07:09.039  1414  1844 D UE      : Fatal error: [File:Runtime/Core/Public/HAL/MallocBinnedCommon.h] [Line: 894]
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : FMallocBinned Attempt to GetAllocationSizeExternal an unrecognized pointer 0x72203668a0
LogPlayLevel: Error: UAT: 08-01 13:07:09.039  1414  1844 D UE      : [2025.08.01-11.07.09:039][  0]Fatal error: [File:Runtime/Core/Public/HAL/MallocBinnedCommon.h] [Line: 894]
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : FMallocBinned Attempt to GetAllocationSizeExternal an unrecognized pointer 0x72203668a0
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x0000007201DCB77C libUnreal.so(0x0000000002AF477C)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x0000007201FB5060 libUnreal.so(0x0000000002CDE060)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x0000007201F7393C libUnreal.so(0x0000000002C9C93C)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x000000720931C4CC libUnreal.so(0x000000000A0454CC)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x000000720276081C libUnreal.so(0x000000000348981C)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x0000007202A4FA78 libUnreal.so(0x0000000003778A78)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x00000072091F375C libUnreal.so(0x0000000009F1C75C)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x00000072091EA5D4 libUnreal.so(0x0000000009F135D4)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.039  1414  1844 D UE      : 0x00000072091D8D04 libUnreal.so(0x0000000009F01D04)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      : 0x00000072091E6F54 libUnreal.so(0x0000000009F0FF54)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      : 0x000000720920BBC4 libUnreal.so(0x0000000009F34BC4)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      : 0x000000730EF557C4 libc.so(0x00000000000CF7C4)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      : 0x000000730EEF81AC libc.so(0x00000000000721AC)![Unknown]()  []
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      :
LogPlayLevel: UAT: 08-01 13:07:09.040  1414  1844 D UE      :
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: === Critical error: ===
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error:
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: Fatal error: [File:Runtime/Core/Public/HAL/MallocBinnedCommon.h] [Line: 894]
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: FMallocBinned Attempt to GetAllocationSizeExternal an unrecognized pointer 0x72203668a0
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x0000007201DCB77C libUnreal.so(0x0000000002AF477C)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x0000007201FB5060 libUnreal.so(0x0000000002CDE060)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x0000007201F7393C libUnreal.so(0x0000000002C9C93C)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x000000720931C4CC libUnreal.so(0x000000000A0454CC)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x000000720276081C libUnreal.so(0x000000000348981C)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x0000007202A4FA78 libUnreal.so(0x0000000003778A78)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x00000072091F375C libUnreal.so(0x0000000009F1C75C)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x00000072091EA5D4 libUnreal.so(0x0000000009F135D4)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x00000072091D8D04 libUnreal.so(0x0000000009F01D04)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x00000072091E6F54 libUnreal.so(0x0000000009F0FF54)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x000000720920BBC4 libUnreal.so(0x0000000009F34BC4)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x000000730EF557C4 libc.so(0x00000000000CF7C4)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error: [Callstack] 0x000000730EEF81AC libc.so(0x00000000000721AC)![Unknown]()  []
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error:
LogPlayLevel: Error: UAT: 08-01 13:07:09.040  1414  1844 D UE      : [2025.08.01-11.07.09:040][  0]LogAndroid: Error:

Development environment:

Edition Windows 11 Pro
Version 24H2
Installed on    ‎12/‎10/‎2024
OS build    26100.3775
Experience  Windows Feature Experience Pack 1000.26100.66.0

Processor   AMD Ryzen 7 7800X3D 8-Core Processor              4.20 GHz
Installed RAM   32,0 GB (31,1 GB usable)
System type 64-bit operating system, x64-based processor
Pen and touch   No pen or touch input is available for this display

Settings:

[/Script/AndroidPlatformEditor.AndroidSDKSettings]
SDKPath=(Path="C:/Users/huhul/AppData/Local/Android/Sdk")
NDKPath=(Path="C:/Users/huhul/AppData/Local/Android/Sdk/ndk/29.0.13599879")
JavaPath=(Path="C:/Program Files/Android/Android Studio/jbr")
SDKAPILevel=latest
NDKAPILevel=latest


[/Script/Engine.CollisionProfile]
+Profiles=(Name="Projectile",CollisionEnabled=QueryOnly,ObjectTypeName="Projectile",CustomResponses=,HelpMessage="Preset for projectiles",bCanModify=True)
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,Name="Projectile",DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False)
+EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore)))

[/Script/EngineSettings.GameMapsSettings]
EditorStartupMap=/Game/FirstPerson/Lvl_FirstPerson.Lvl_FirstPerson
LocalMapOptions=
TransitionMap=
bUseSplitscreen=True
TwoPlayerSplitscreenLayout=Horizontal
ThreePlayerSplitscreenLayout=FavorTop
GameInstanceClass=/Script/Engine.GameInstance
GameDefaultMap=/Game/FirstPerson/Lvl_FirstPerson.Lvl_FirstPerson
ServerDefaultMap=/Engine/Maps/Entry
GlobalDefaultGameMode=/Game/FirstPerson/Blueprints/BP_FirstPersonGameMode.BP_FirstPersonGameMode_C
GlobalDefaultServerGameMode=None

[/Script/Engine.RendererSettings]
r.ReflectionMethod=1
r.GenerateMeshDistanceFields=True
r.DynamicGlobalIlluminationMethod=1
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true
r.AllowStaticLighting=False


r.SkinCache.CompileShaders=True

r.RayTracing.RayTracingProxies.ProjectEnabled=True

r.Shadow.Virtual.Enable=1

r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8

r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8

[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
-D3D12TargetedShaderFormats=PCD3D_SM5
+D3D12TargetedShaderFormats=PCD3D_SM6
-D3D11TargetedShaderFormats=PCD3D_SM5
+D3D11TargetedShaderFormats=PCD3D_SM5
Compiler=Default
AudioSampleRate=48000
AudioCallbackBufferFrameSize=1024
AudioNumBuffersToEnqueue=1
AudioMaxChannels=0
AudioNumSourceWorkers=4
SpatializationPlugin=
SourceDataOverridePlugin=
ReverbPlugin=
OcclusionPlugin=
CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0)
CacheSizeKB=65536
MaxChunkSizeOverrideKB=0
bResampleForDevice=False
MaxSampleRate=48000.000000
HighSampleRate=32000.000000
MedSampleRate=24000.000000
LowSampleRate=12000.000000
MinSampleRate=8000.000000
CompressionQualityModifier=1.000000
AutoStreamingThreshold=0.000000
SoundCueCookQualityIndex=-1

[/Script/LinuxTargetPlatform.LinuxTargetSettings]
-TargetedRHIs=SF_VULKAN_SM5
+TargetedRHIs=SF_VULKAN_SM6

[/Script/AIModule.AISystem]
bForgetStaleActors=True

[/Script/Engine.Engine]
NearClipPlane=5.000000


+ActiveGameNameRedirects=(OldGameName="TP_FirstPerson",NewGameName="/Script/MyProject5")
+ActiveGameNameRedirects=(OldGameName="/Script/TP_FirstPerson",NewGameName="/Script/MyProject5")

+ActiveClassRedirects=(OldClassName="TP_FirstPersonPlayerController",NewClassName="MyProject5PlayerController")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonGameMode",NewClassName="MyProject5GameMode")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonCharacter",NewClassName="MyProject5Character")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonCameraManager",NewClassName="MyProject5CameraManager")

[/Script/HardwareTargeting.HardwareTargetingSettings]
TargetedHardwareClass=Desktop
AppliedTargetedHardwareClass=Desktop
DefaultGraphicsPerformance=Maximum
AppliedDefaultGraphicsPerformance=Maximum

[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
bEnablePlugin=True
bAllowNetworkConnection=True
SecurityToken=CA478A2D41DDCCEEB6F23A8046F029A4
bIncludeInShipping=False
bAllowExternalStartInShipping=False
bCompileAFSProject=False
bUseCompression=False
bLogFiles=False
bReportStats=False
ConnectionType=USBOnly
bUseManualIPAddress=False
ManualIPAddress=

[/Script/AndroidRuntimeSettings.AndroidRuntimeSettings]
NDKAPILevelOverride=android-29
4
  • side note: stackoverflow.com/q/14741144/5382650 Commented Aug 1 at 17:28
  • 2
    Considering the crash point to a path that starts with Runtime/Core/, have you considered that maybe, the implementation of std::stringstream is broken on UE5.6's Android build? In which case, your best bet might be to report it to UE devs. Either way, if other concatenation methods work, why don't you use that instead of std::stringstream? And why do you refuse "answers that say 'do not use std::string; use Unreal Engine types instead.'"? It's hard to help you without more context. Commented Aug 5 at 9:38
  • "Considering the crash point to a path that starts with Runtime/Core/, have you considered that maybe, the implementation of std::stringstream is broken on UE5.6's Android build?" I switched to 5.5.4 and std::string{} + std::string{"longstringtopreventsso"} is not crashing anymore. Commented Aug 5 at 20:05
  • @KoronisNeilos is only std::string{} + std::string{"longstringtopreventsso"} not crashing anymore, or is std::stringstream not crashing anymore on 5.5.4 too? If it fixed both, then the best solution might be to switch to UE5.5.4 for the time being, until the problem gets fixed by UE devs in the next release. Commented Aug 8 at 7:10

2 Answers 2

0

Use a custom allocator that bypasses Unreal's system:

template<typename T>
struct SystemAllocator {
    using value_type = T;
    T* allocate(size_t n) { return (T*)std::malloc(n * sizeof(T)); }
    void deallocate(T* p, size_t) { std::free(p); }
};

using SafeString = std::basic_string<char, std::char_traits<char>, SystemAllocator<char>>;
using SafeStringStream = std::basic_stringstream<char, std::char_traits<char>, SystemAllocator<char>>;

// Usage
SafeStringStream ss;
ss << "someLongStringToPreventShortStringOptimization";

This allocates directly via malloc/free instead of Unreal's.

Sign up to request clarification or add additional context in comments.

Comments

-1

This crash happens because Unreal Engine’s custom allocator (FMallocBinned) conflicts with Android’s STL allocator when std::stringstream or certain std::string operations cause heap allocations.

So avoid using std::stringstream and dynamic string concatenations like std::string{} + "long_string" on Android builds.

Instead, use Unreal’s native FString:

FString MyStr(TEXT("someLongStringToPreventShortStringOptimization"));

1 Comment

I tried this but sadly it also crashes in my dependencies.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.