运行一段时间后出现分段故障(核心转储)

时间:2017-09-20 10:14:30

标签: c function gcc

我正在尝试将输出打印为

 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();
}

2 个答案:

答案 0 :(得分:4)

您正在调用func1,而func1又调用func2,而func2又调用func1,依此类推。这是无限递归 - 您可能无限地打印程序。在某些时候,它将耗尽堆栈空间并返回您遇到的错误。你需要一个停止条件告诉func2不再调用func1,如果你的程序要做的事情已经完成了。请参阅此处针对其他问题的递归终止示例:https://en.wikipedia.org/wiki/Recursion_termination

答案 1 :(得分:4)

编译器不会抛出分段错误,你的程序会这样做。

您的程序会无限次地调用func1()func2(),导致它爆炸,因为将超出堆栈大小(因此会发生分段错误)。