C 数组段错误仅在特定阈值之后

标签 c arrays segmentation-fault

我正在查看这个简单的程序。我的理解是,尝试修改超过最大索引的内存地址处的值应该会导致段错误。但是,下面的代码运行没有任何问题。我什至能够打印出所有 6 个数组索引 0->6

main()
{
  int i;
  int a[3];

  for(i=0; i<6; i++)
        a[i] = i;

}

但是,当我将 for 循环更改为

for(i=0; i<7; i++)

并执行程序,它会出现段错误。 在我看来,这几乎像是 malloc 完成的某种额外填充。 为什么这只发生在第 6 个索引 (s+6)之后?这种行为会发生在更长/更短的数组上吗?请原谅我作为低级 Java 程序员的愚蠢:)

最佳答案

This almost seems to me like it is some kind of extra padding done by malloc.

您没有调用 malloc()。您将 a 声明为堆栈内存中的 3 个整数数组,而 malloc() 使用堆内存。在这两种情况下,访问最后一个元素(第三个元素,在本例中为 a[2])之后的任何元素都是未定义的行为。当它完成堆内存时,通常会导致段错误。

关于C 数组段错误仅在特定阈值之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24471467/

相关文章:

c - Bresenham 的圆算法

c - 关于#if defined (macro name) 的问题

cuda内核没有访问数组的所有元素

c - 返回有错误的二维数组,需要概念

python / NumPy : How do you assign the end+1 element of an array similar to how it's done in Matlab?

javascript - 使用 php 创建测验,将数组数据存储在数据库的字段中

c - 执行thread_kill时出现segmentation fault

由于输入数组尺寸过大,C 程序崩溃(段错误)。如何在不使用 static/global/malloc 的情况下防止它?

c - 尝试将 strcpy() 用于 2D 字符数组时出现段错误?

c - 如何在读取重定向文件的特定行时使程序结束