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