【发布时间】:2017-06-13 18:40:16
【问题描述】:
我有以下功能:
void AddActor(AActor* Actor)
{
if (!IsValid(Actor)) { return; }
if (Actor->IsA(ACertainActor::StaticClass()))
{
//...
}
}
它传递了一些有效和一些无效的Actor-指针(Actors 正在等待销毁或已被销毁)。
如果对象可用,则根据代码文档IsValid() 返回true:
/**
* Test validity of object
*
* @param Test The object to test
* @return Return true if the object is usable: non-null and not pending kill
*/
但它在if (Actor->IsA(ACertainActor::StaticClass())) 崩溃并引发访问冲突:
Exception thrown at 0x00007FF868B56895 (UE4Editor-CoreUObject.dll) in UE4Editor.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
我希望IsValid(Object) 检查Object 是否为nullptr,引擎知道Object,如果知道,则检查它是否等待销毁。
所以在IsValid(Object) 返回true 之后,Object 应该可以使用了。
这不是它的工作原理吗?
有没有其他方法可以检查指针是否指向可以使用的有效对象?
【问题讨论】:
-
在致电
IsValid之前,文档没有明确说明要求。但据推测,您的代码不符合它们。我推测指针必须是 nullptr,指向有效的AActor或指向无效的AActor(等待终止)。
标签: c++ access-violation unreal-engine4