如果我重复运行这个程序,为什么在seg-fault之前打印的最后一个数字会有所不同?

Joã*_*osa 7 c linux stack operating-system segmentation-fault

问题是关于linux如何处理堆栈.当我遇到运行此代码的分段错误时,为什么不确定?

#include <stdio.h>
#include <stdlib.h>
#include <sys/resource.h>

void step(int n) {
    printf("#%d\n", n);
    step(n + 1);
}

int main() {
    step(1);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*sta 1

因为堆栈溢出是未定义的行为。实现可以自由地测试它是否不会发生,在这种情况下,当堆栈已满时,程序应该以错误结束。但环境还可以提供一个堆栈,其大小取决于可用内存。或者更可能的是,您可能会在与 io 系统交互时遇到各种内存覆盖问题,这可能是不确定的。或者...(UB本质上意味着任何事情都可能发生)。