• 注册
欢迎加入behaviac Q&A网站。behaviac是腾讯开源组件https://github.com/TencentOpen/behaviac 官方网站:http://www.behaviac.com/,提供各种文档和教程及手册 为了您及时的获得您最新问题的评论或者回答,请提供并验证您的邮箱

删除代理,内存溢出错误。

0 喜欢 0 不喜欢
75 浏览

遇到个问题,自定义函数调用全局实例的变量为参数时内存被修改,导致删除崩溃。由于自定义函数计数后要将函数参数设置到parholder<!--StartFragment -->

<!--StartFragment -->

全局实例的变量试图以当前调用者为基指针直接用自己不具备的类成员指针对起修改。
最新提问 7月 11, 2016 用户: 云溪 (130 分)
标签修改 8月 2, 2016 用户:jonygli

1个回答

0 喜欢 0 不喜欢
请提供更多细节。堆栈,workspace等。
最新回答 7月 11, 2016 用户: jonygli (58,290 分)

image

这里AttributeInstance是全局单例。实体是它的一个成员。

ObjectInstance也是全局单例。

这里有3个代理

    a.当前使用者 继承自EntityAgent->Agent

    b.AttributeInstance 继承自EntityAgent->Agent

            有代码注册的实体成员 EntityAgent类型。

    c.ObjectInstance 继承自EntityAgent->Agent

            有方法 移动位置

    d.临时对象 为了避免错误而加的中间变量。

b 是全局单例,提供公用方法和一些变量。

c 只提供公用的方法。

方法 移动位置(参数 临时对象):临时对象原来直接使用的AttributeInstance.实体,现在转了一道为了避免被CGenericMethod1_<R, ObjectType, ParamType>::m_param.SetVariableRegistry(parHolder, v); 修改掉内存。

这里会在移动位置调用完后将 它的参数设置给a,所以会将当前对象当成b 进行内存修改,将实体参数设置给 a

有一个新的版本:http://www.behaviac.com/language/zh/downloads/#357_2016-07-12

看是否fix了。

否则如果还没有fix的话,请根据http://bbs.behaviac.com/index.php/1098/

提供需要的信息。

...