【已解决】从3.6升级到3.7后,出现了一个及其诡异的bug

呃···好像发错区了。
项目在github上,有兴趣的同学可以帮我看下:
https://github.com/acros/cocos2dx_qte

之前在3.6上自己做着玩,没出现什么问题。昨天看到3.7整合了bullet就升级了。
升级方法也很简单···因为没改底层,索性用3.7新建了一个同名的工程,然后把Class和Resource都拷过去重加了一遍(话说3.7内存管理方式有改动? CC_CONSTRUCT_ACCESS都变成public了)。

然而出现了一个奇怪的bug,一晚上愣是没看出原因,问题是这样的:

自定义了一个MainGameScene,继承自Scene。
MainGameScene类成员变量就多了两个RefPtr

创建过程都是正常的。奇怪的是第一次更新Scene时问题来了,读取到的_navMesh和_navMeshDebugCamera竟然是两个RefPtr的地址。
按内存分布说,两个RefPtr指针才是在派生类末端8字节,Navmesh有关的两个指针在基类末端,两个RefPtr之前。

我试着把加进去的两个RefPtr去掉,果然就好了····
又试了下关闭CC_USE_NAVMESH,和预料中一样····这次前面的成员变量_physics3DWorld地址和RefPtr的一样了···

为啥这个内存地址如此诡异,实在想不出原因,哪位能提点下,谢过先了····
VS用的 2013 Community 12.0.31101.0 Update4,难道有BUG?

图中可以看到,mGameLayer和mUiLayer两个RefPtr指针和_navMesh/_navMeshDebugCamera

求教3.7怎么用ide??

使用官网上的定制frameworks吗

这个工程用的C++,就没开cocos ide了,cocos new创建的工程

我也发现这个问题了,但是我这崩溃只会发生在64位设备上,32位设备一点问题没有。。。就最简单的继承Scene都会崩溃

肯定不是IDE的问题,我xcode也崩溃

试了下,在ccConfig.h里面258行,把CC_USE_3D_PHYSICS这个关掉,就不会崩溃了

谢谢。
查了两天,刚确认bug,要是早点看到你的方案就好了。

实际是这样的:
CC_ENABLE_BULLET_INTEGRATION=1在cocos2d-x DLL中启用,但是继承项目中并没有添加这个宏,导致主项目引用DLL时,实际编译头文件忽略了 Physics3DWorld* 和 Camera*两个指针,DLL外进行Scene类内访问时,这之后的变量寻址的就全部出错了。
所以我的修改方法就是在主项目预定义宏里面加上CC_ENABLE_BULLET_INTEGRATION=1解决问题了。

刚在git上写了个issue,估计他们会马上修正吧。

哇哇哇~~ 多谢楼主和大家,终于找到答案了!!!!