首页 > 代码库 > cocos2d的一个奇葩错误

cocos2d的一个奇葩错误

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one

运行时检查失败#0 - ESP的值在函数调用中未正确保存。 这通常是通过调用一个声明的函数的结果

 

解决方案:

 Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call..

这是最奇葩的错误了,有的时候不怎么出现,但一旦报这个错保准能让你求生不得求死不能。为什么?太高深了太低层了呀。查网上有关这错误的,有的说是函数调用时有内存溢出把栈给冲毁了。你说这怎么改?还有的说是调用错误,应该声明_stdcall。可是我又没用到那玩艺,难道要改低层cocos2d-x引擎呀?终于,找到一篇有用的文章说是还是函数指针错误 ,函数指针调用时与规定的格式参数不匹配会报这个错。我这个错是在update函数里出现的,调用如下:在某层init方法中:

//设置定时回调方法
auto sched = Director::getInstance()->getScheduler();
sched->schedule(//设置定时回调方法
auto sched = Director::getInstance()->getScheduler();
sched->schedule(SEL_SCHEDULE(&MenuLayer::update), this, 0.1f, false);  //每0.1秒回调一下

问题就是这个update方法声明,这位大牛是在Android环境下写的,在类声明中写成void update();

但我们知道update是声明标准是void update(float dt);而且SEL_SCHEDULE也声明了update是带参数float型,所以这里函数指针与规定的不匹配,就会报这个难解的错误,我搜索工程中所有的update,都加上参数float dt,问题解决!

cocos2d的一个奇葩错误