UE4 崩溃记录(随时更新)

 

1.float值的异常。

原因:此异常值为除0的后果,可以用FMath::IsNaN()来判断。另外,还有FMath::IsFinite()是判断是否无穷,如:当出现2.12345678987此类小数点过多的情况时会判断时无穷。

 

2.指针为空,调用其变量或函数。(很常见)

  指针不为空,但内容出现NULL或者异常。(此情况一般是,对这个对象的多处指针引用,但是在A处销毁了,之后在B处继续调用)。这个情况牵扯到内存管理,如果此对象的类是属于UE4的,那可以 yourObject!=nullptr&&_yourObject->IsValidLowLevel()

参见UE4UObjectBase这个底层基类

bool UObjectBase::IsValidLowLevel() const;

bool UObjectBase::IsValidLowLevelFast(bool bRecursive /*= true*/) const

这个UE4自己的内存管理可以解决上述这个问题。但是如果是自己写的C++类,那就要自己设计好内存管理了。

 

3.UMG中,撤销键连续的快速按,会崩溃。

 

2018.9.19更新:

4.频繁出现了调用纯虚函数的崩溃。这问题还是内存溢出,是因为子类被销毁了,指向子类的指针只向基类,但又调用了这个纯虚函数导致了崩溃。参考《Effective C++》第九条:绝不在构造和析构过程中调用virtual函数。

 

2018.11.22更新:

5.lambda表达式使用不当出现的崩溃。主要是因为表达式中捕获的参数比如指针,指针指向的那个对象已经被销毁,需要对捕获的一些参数有效性进行判断。

如图,loadingPanel是this对象里的一个成员变量,因为lambda表达式里的函数体用的是独立的堆栈,所以如果不判断this指针,那就会崩溃。参考一篇利用反汇编了解lambda表达式的原理:https://blog.csdn.net/LPWSTR/article/details/79633944#commentBox

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值