问题描述
UE4C++。在UE4Editor中正常运行。打包成可执行文件后,运行中报错fatal error且无错误代码。VSDebug也无任何报错。
原因
仅针对我的情况。
在空指针并未完成赋值时,对其解引用:
在GameMode的BeginPlay中会对某空指针进行赋值,同时在UserWidget(在HUD的BeginPlay中被CreateWidget)的NativeConstruct中会对此指针解引用,先后顺序UB,因此fatal error。
由于在UE4Editor中,GameMode是在Editor运行后(打开Map的同时)开始构建,HUD是在游戏运行后才开始构建。因此,在UE4Editor中,对该空指针的赋值大多能在解引用之前完成,从而正常运行。
以上仅为推测,我对源码没有研究,仅供参考。
解决
优化架构、利用构造函数。处理好空指针的赋值和解引用的先后顺序。
说一句话
这个问题主要坑在无法在UE4Editor和VSDebug中发现,打包运行后才暴露且无错误提示,让人一时难以理解。