函数在递归调用时会占用栈的空间,因此,当递归达到一定的深度时,就会出现栈溢出的情况。
下面的代码,函数的参数值为多少,就进行了多少次递归。这个程序直接运行,得不得最终的结果:2000000,
因为栈没有那么大。
#include "stdio.h"
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}
增加栈的大小的方法:
在vc++中,使用#pragma comment(linker, "/STACK:1000000000")语句,
其中STACK:后面的数字为指定的栈的大小。
#include "stdio.h"
#pragma comment(linker, "/STACK:1000000000")
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}
在g++(即DEV-C++)中,采用如下办法
#include "stdio.h"
#include "stdlib.h"
int fun(int n)
{
if(n==1)
return 1;
return fun(n-1)+1;
}
int main()
{
int size = 256 << 20; // 指定栈大小为256MB
char *p = (char*)malloc(size) + size;
__asm__("movl %0, %%esp\n" :: "r"(p));
int k=0;
k=fun(2000000);
printf("%d\n",k);
return 0;
}
本文探讨了递归调用导致栈溢出的问题,通过一个简单的C语言程序演示了如何达到2000000次递归调用的极限,并提供了在VC++和G++中增加栈大小的方法。
932

被折叠的 条评论
为什么被折叠?



