c - 为什么这段代码不会导致段错误?

标签 c segmentation-fault

为什么没有这个段错误?

#include <stdio.h>
int main()
{
    int i;
    int arr[] = {1, 2, 3, 4};

    for(i=0;i<8;i++)
    {
        arr[i] = i;
        printf(" %d", arr[i]);
    }

    printf("\n");

    return 0;
}

但是当我在 for 循环中将 8 替换为 9 时,它会发生。

注意:我正在 32 位 crunchbang linux 上尝试

最佳答案

从技术上讲,这个程序的结果是 undefined behavior ,这意味着绝对不能保证允许此程序执行的操作。原则上,它可以格式化您的硬盘驱动器、通过电子邮件向您的所有 friend 发送令人讨厌的消息、点燃您的计算机,或者变得有意识并奴役人类。

在这种情况下,当 n = 8 时的未定义行为恰好没有做任何坏事,而当 n = 9 时的未定义行为会导致段错误。两者都是程序完全允许的行为,但完全不能保证可移植。

希望这对您有所帮助!

关于c - 为什么这段代码不会导致段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16425113/

相关文章:

c - 已编译的 C 二进制文件中的 []A\A]A^A_ 和 ;*3$"

c - 为什么有些 C 标准头文件以 'std' 开头,而有些则不是?

c - 使用指向存储在结构 C 中的数组的指针访问数组

c++ - 在类和构造函数中使用 vector 时出现段错误

Python PyEnchant 段错误或无效指针

c - 为什么内存不分配?

c++ - 通过内存地址加载Lua函数变量?

linux - 以不确定的方式使用 pthreads 时出现段错误

c - 小C程序中的段错误

c - 段错误难题