Skip to content

CacheScriptContainer导致的崩溃 #455

@Italink

Description

@Italink

你好,我在动画蓝图中使用Unlua遭遇了崩溃,虽然触发的条件比较苛刻,但它确实是一个问题,当下的使用情况是:

  • 在一个动画蒙太奇使用了多个动画通知,这些动画通知都有一些不同数组类型的局部变量(这些局部变量会在执行动画通知时创建,执行结束后销毁)。
  • 动画通知中都调用一个Lua函数(由蓝图接口公开过去,再在Lua中覆盖的),函数的参数包含动画通知的局部变量
  • 综上,在我执行上述蒙太奇时会导致崩溃。

下面是估计的崩溃原因:

  • 当蒙太奇在调用第一个动画通知时,会进入到FFunctionDesc::CallLuaInternal,中,读取动画通知的局部变量,通过追踪 FArrayPropertyDesc::GetValueInternal,我发现它最终会根据地址将该数组Cache,即调用了LuaCore.cpp中的CacheScriptContainer
  • 在第一个通知执行结束时,它的局部变量被释放。
  • 执行到第二个动画通知,会在原先的地址上创建新的Property,这时就导致Unlua使用Cahce中的数组进行访问。
  • 由于数组类型保存的是元素的引用,Unlua会根据引用按原先的数组结构去访问新的数组内容,因此导致了崩溃。

花了好长时间才找到问题所在,如果能解决的话就太好了,感激不尽。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions