在IsValid(Object)返回true后,为什么Object不能安全使用?

时间:2017-06-13 18:40:17

标签: c++ access-violation unreal-engine4

我有以下功能:

El sistema no puede encontrar la ruta especificada.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! flashcard-app@1.0.0 server: `cd public; live-server --port=1234 --
entry-file=index.html`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the flashcard-app@1.0.0 server script.
npm ERR! This is probably not a problem with npm. There is likely additional 
logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\Robbie\AppData\Roaming\npm-cache\_logs\2017-06-
13T18_35_14_604Z-debug.log

它传递了一些有效的和一些无效的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返回true后,IsValid(Object)应该可用。

这不是它的工作原理吗?

还有其他方法可以检查指针是否指向可以使用的有效对象吗?

1 个答案:

答案 0 :(得分:3)

好吧,从您的例外情况来看:

  

UE4Editor.exe中的0x00007FF868B56895(UE4Editor-CoreUObject.dll)抛出异常:0xC0000005:访问冲突读取位置0xFFFFFFFFFFFFFFFF。

明确指出此指针不是nullptr,它的值为0xFFFFFFFFFFFFFFFF。因此,IsValid的工作方式与文档中所述相同:

  

如果对象可用,则返回true:非null且未挂起kill

您应该将指针初始化为nullptr