执行时候直接结束,调试时候一步步跟进相当于死循环
代码如下
#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里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
·退出条件
·参数有哪些
·返回值是什么
·局部变量有哪些
·全局变量有哪些
·何时输出
·会不会导致堆栈溢出
[解决办法]
死循环
直接运行 栈不够了可能直接结束
单步调试 到栈不够 需要很多次
[解决办法]
无限递归了。
[解决办法]