一个成员函数指针作为函数返回值返回后,接收到的指针却不是有效指针

小圆大侠 2018-11-26 07:23:37

//cocos2d::extension::SEL_CCControlHandler是这样声明的
typedef void (CCObject::*SEL_CCControlHandler)(CCObject*, CCControlEvent);

cocos2d::extension::SEL_CCControlHandler LoginUiLoaderLayer::onResolveCCBCCControlSelector( CCObject * pTarget, const char* pSelectorName )
{
CCB_SELECTORRESOLVER_CCCONTROL_GLUE(this, "loginPressed", LoginUiLoaderLayer::loginPressed);
//上面这个宏相当于 return (SEL_CCControlHandler)(&LoginUiLoaderLayer::loginPressed)
//这里用(SEL_CCControlHandler)(&LoginUiLoaderLayer::loginPressed)输出可以看到是有效指针
return NULL;
}

//这个是要传递的成员函数
void LoginUiLoaderLayer::loginPressed( cocos2d::CCObject * pSender, cocos2d::extension::CCControlEvent pCCControlEvent )
{
//函数实现省略
}

//这是接收函数返回值的地方,输出 selCCControlHandler 可以看到变成了0x1,用成员指针的方式调用会报错
SEL_CCControlHandler selCCControlHandler = 0;
selCCControlHandler = targetAsCCBSelectorResolver->onResolveCCBCCControlSelector(target, selectorName.c_str());


这是在用cocos引擎做Android平台开发,
IDE是AndroidStudio,
Cmake方式打包so文件,
在debug版下或在release版下debuggale开关打开的情况下,可以正常运行,release版且不允许调试就出现以上情况
有大神可以解决吗?
...全文
555 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Symphony丶 2019-06-22
  • 打赏
  • 举报
回复
解决了吗兄弟? 我再ndk r10b 切换成 ndk r19以后也出现了这个问题, 我尝试把数值保存起来 判断是否是本地变量出了方法被释放, 但实际不是想的那样, 现在考虑是编译器优化 或是 编译器的复制过程问题.
taodm 2019-01-16
  • 打赏
  • 举报
回复
所以,你的问题就是和宏没有关系呗。你找错方向了。
引用 8 楼 小圆大侠 的回复:
[quote=引用 6 楼 taodm 的回复:] 不要用那个宏,直接自己写return(&LoginUiLoaderLayer::loginPressed呗。 看结果是否有区别呗
这个也试了,不行[/quote]
小圆大侠 2019-01-14
  • 打赏
  • 举报
回复
引用 6 楼 taodm 的回复:
不要用那个宏,直接自己写return(&LoginUiLoaderLayer::loginPressed呗。
看结果是否有区别呗


这个也试了,不行
小圆大侠 2019-01-14
  • 打赏
  • 举报
回复
引用 5 楼 Wang821220 的回复:
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char -fexceptions -O0
加一个 -O0 就可以了。。。这个就是关掉优化。


这个我早就试过了也不行
taodm 2019-01-11
  • 打赏
  • 举报
回复
不要用那个宏,直接自己写return(&LoginUiLoaderLayer::loginPressed呗。 看结果是否有区别呗
Wang821220 2019-01-10
  • 打赏
  • 举报
回复
APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char -fexceptions -O0 加一个 -O0 就可以了。。。这个就是关掉优化。
赵4老师 2018-12-01
  • 打赏
  • 举报
回复
只有静态成员函数的指针才是长期有效的。
小圆大侠 2018-12-01
  • 打赏
  • 举报
回复
引用 2 楼 赵4老师的回复:
static ?
能说明白点吗?不太懂
赵4老师 2018-11-28
  • 打赏
  • 举报
回复
static ?
小圆大侠 2018-11-27
  • 打赏
  • 举报
回复
没人可以解决吗,自己顶一下帖

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧