cocos2d-x 坑爹的函数回掉

<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">我在HelloWorld类中定义了一个int类型的指针变量,然后新赋了一个值,然后当我在 menuCloseCallback (HelloWold 中退出按钮的回掉函数)打印这个int指针变量的时候却是另外一个值。<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">部分代码:<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">helloworld init 函数中: <br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">int a = 998;<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">this->ptr = &a; // ptr 是一个int类型的指针<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">cout << *ptr << endl; // 这里输出是 998<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">menuCloseCallback函数中:<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">cout << *ptr << endl; // 这里输出的却是另外一个值<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">而使用int变量是没有问题的,一旦使用指针就出现问题了<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">
<span style="""“color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">有没有人知道为什么呢?<br style="""“outline:none;color:#333333;font-family:'Helvetica”"" neue’,="""""" helvetica,="""""" stheiti,="""""" 微软雅黑,="""""" 黑体,="""""" arial,="""""" tahoma,="""""" sans-serif,="""""" serif;font-size:14px;line-height:24px;"="""""">

兄弟,你这....

这里ptr指向 a这个变量的内存。在init函数里面,a是存在的,此时print是有内存地址的。也就是a。

而过了init函数,a这个局部变量,就被删除了。ptr也就指向一个空的地址。在callback里面打印,当然是神马都不是的一个东西了。

当然,这个标题有标题党的嫌疑

兄弟在,不要乱说。

这里是c++的内存机制。跟cocos2d-x可没关系。不要挂这么高的牌匾。

恩,你说的有道理,我问这个问题是因为我在callback中调用objc 的 iap 单例,就出现了类似的问题,后来搜到这篇文章就以为是cocos的问题。
http://blog.csdn.net/laik228/article/details/8937382