我正在尝试将输出打印为
func 1 ---------------1
func 2 -------2
func 1 ---------------1
func 2 -------2
indefinetly。
但是我在程序执行一段时间后得到segmentation fault core(dumped)
。
为什么我的gcc编译器显示此错误?
#include<stdio.h>
int i=2;
int main(int argc, char *argv[]){
func1();
func2();
return 0;
}
void func1(){
printf("\n func 1 ---------------%d",i);
i=2;
func2();
}
void func2(){
printf("\nfunc 2 -------%d",i);
i=1;
func1();
}
答案 0 :(得分:4)
您正在调用func1,而func1又调用func2,而func2又调用func1,依此类推。这是无限递归 - 您可能无限地打印程序。在某些时候,它将耗尽堆栈空间并返回您遇到的错误。你需要一个停止条件告诉func2不再调用func1,如果你的程序要做的事情已经完成了。请参阅此处针对其他问题的递归终止示例:https://en.wikipedia.org/wiki/Recursion_termination。
答案 1 :(得分:4)
编译器不会抛出分段错误,你的程序会这样做。
您的程序会无限次地调用func1()
和func2()
,导致它爆炸,因为将超出堆栈大小(因此会发生分段错误)。