超出数组最大索引的未定义行为

Jos*_*ing 4 c arrays undefined-behavior

情况

我正在学习速成课程,以熟悉C,并且我注意到本课程的作者可以打印超出数组索引的数组值,并确信该值将是0每次的。

下面的速成课程中的代码:

int arrayVar[] = {45, 67, 34, 23};
printf("This array index value is %d", arrayVar[4]);
Run Code Online (Sandbox Code Playgroud)

代码输出:

This array index value is 0
Run Code Online (Sandbox Code Playgroud)

根据我的经验,在C的修补/测试过程中,一旦超出数组的最大索引,您将进入未定义的行为范围任何事情都可能发生,因此他如何对看到一个数组如此自信(正确)?0每次有价值吗?

如果我打印的值超出了数组的最大索引,我会看到“随机”值(或内存中剩余的值,对吗?)。

为什么我的经验与本课程中看到的不同?这只是C标准的不同吗?还是这表明编译器有所不同?或两者?

环境信息:我正在使用C11标准,并且正在使用ubuntu(位于)默认安装的编译器(我很确定)/usr/bin/cc

编辑:对于任何有兴趣了解我所见内容的人,这是课程的链接(您可能会被提示登录Udemy):https ://www.udemy.com/c-fast-crash-course- 简介/学习/讲座/ 12868540#questions

样本图片

Lig*_*ica 12

该课程的作者是错误的。

就这么简单。

  • 是的,只是机会。这是因为在此之前最有可能的内存未分配。而且某些编译器可能只是将未使用的内存初始化为0。 (2认同)