首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

执行时分直接结束,调试时候一步步跟进相当于死循环

2013-12-13 
执行时候直接结束,调试时候一步步跟进相当于死循环代码如下#include stdio.htypedef void (*pFun)(int v

执行时候直接结束,调试时候一步步跟进相当于死循环
代码如下
#include <stdio.h>

typedef void (*pFun)(int value);

bool CallBackFun(pFun fun, int value);

void OnChange(int value)
{
if (value == 20)
{
return;
}
CallBackFun(OnChange,value);
}

bool CallBackFun(pFun fun, int value)
{
fun(value);

return true;
}
int main(int argc, char* argv[])
{
if (CallBackFun(OnChange,2))
{
printf("dsadasdas\n");
}

printf("11111111111111\n");

return 0;
}
自定义回调 调试 死循环 回调函数
[解决办法]
因为value==20这个条件永远不能达到,递归就不能正确结束, 最终结果就是栈溢出, 程序崩溃掉.
void OnChange(int value)
{
 ++value;  //简单加一句, 程序应该就能正常运行了, 当然, 我不知道你的意图
if (value == 20)
{
return;
}
CallBackFun(OnChange,value);
}
[解决办法]
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出

[解决办法]
死循环
直接运行 栈不够了可能直接结束
单步调试  到栈不够 需要很多次
[解决办法]
无限递归了。
[解决办法]

引用:
无限递归了。

不是递归,只是两个接口循环调用吧

热点排行