c - 具有递归功能的段错误

标签 c

#include<stdio.h>

int recursive(int f,int g){
    static int a;;
    static int b;
    int c = 100;
    a = f;
    b = g;
    if(c != 105){
        a++;
        b++;
        c++;
        recursive(a,b);
    }

    printf("\n a : %d b : %d \n",a,b);

    return 0;
}


int main(){
    int a = 10;
    int b = 1;
    recursive(a,b);
}

上面的示例递归程序给出了段错误。无法理解为什么会发生段错误,因为不涉及任何指针。

最佳答案

你在那里有无限递归。因为c从不等于105(每次进入函数时都设置为100),函数只会一遍又一遍地调用自己,直到你炸毁堆栈(超出其容量)。

它归结为一些简单的事情:

int blowUpStack (int a) {
    blowUpStack (a);
}

关于c - 具有递归功能的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25569948/

相关文章:

c - 声明一个高范围字符数组,但不使用 RAM - 仅当其中有字符时使用

c++ - 为什么这个段错误没有

c - 解包的 msgpack_object 是否依赖于解包的缓冲区?

c - 取消引用该指针给我-46,但我不知道为什么

c - system() 的返回码

c - 为什么这个代码给出这个输出 - "HCF is: 1"每当 a%b != 0?

c - "error: linker command failed with exit code"用于使用 crypt 函数

c++ - 通过时间比较猜测字符串。是否可以?

c - 如何在C中获取2维数组的行大小

c - Visual Studio - 在 64 位项目中编译 32 位代码