用C语言编两个函数互相调用的程序,但每次运行后都提示"系统已停止运行",单步调试出现“stack overflow"

源程序如下:
#include<stdio.h>
int a=1,b=9;
void change();
void change1();
void main()
{
change();
}
void change()
{
for(int i=0;i<2;i++)
{
printf("a=%d\n",a);
change1();
}
}
void change1()
{
for(int i1=0;i1<2;i1++)
{
printf("b=%d\n",b);
change();
}
}

望解答

互相反复调用,一方面是死循环,另一方面,系统资源堆栈会耗尽。
我们可以加一个循环控制条件,让它只循环有限次结束。

#include <stdio.h>
int a=1,b=9;
int k=0,k_m=10; // 用k 记录次数,设最多次数为 k_m

int change();
int change1();

int main(){
change();
return 0;
}

int change(){
int i;
k++; if (k > k_m) return 1; // 次数满了,结束程序
for(i=0;i<2;i++) {
printf("a=%d\n",a);
change1();
}
return 0; // 正常返回0
}

int change1(){
int i1;
k++; if (k > k_m) return 2; // 次数满了,结束程序
for(i1=0;i1<2;i1++) {
printf("b=%d\n",b);
change();
}
return 0; // 正常返回0
}

这就没问题了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-17
你好,首先调用change(),系统会分配临时的内存空间,之后调用change1()又会分配,而change1()会调用change(),这样就会形成死循环,如此一来,系统会一直分配内存空间,而系统对于分配给一个程序临时存放数据的内存空间大小是有限的,这样一来就会内存空间不足,会产生溢出,所以就会报错了
第2个回答  2013-12-17
两个函数相互调用,死循环,栈溢出了
第3个回答  2013-12-17
是啊,A调用B,B又调用A,这样反复下去,就是一个递归的死循环。最后把堆栈给塞满了,不就要报StackOverflow错误了吗?
相似回答