为什么我没有得到SIGSEGV?

时间:2015-01-08 21:56:35

标签: c arrays pointers segmentation-fault

我想了解这里发生了什么,更确切地说,为什么我在写入内存位置时没有收到分段错误,根据我的理解,我没有分配。

假设我要定义一个int(testptr)的2D数组。一维( 4 )静态分配(作为“数组”),第二维( 2 )动态分配(作为“指针”)。

// First dimension 4 rows static
int *testptr[4];
for (i=0; i<4; i++)
    testptr[i] = calloc(2, sizeof(int));
// Second dimension 2 columns "dynamically" (in this example it is really just a constant)

现在我写信到某些地方:

testptr[0][0] = 5;
testptr[1][0] = 6;
testptr[2][1] = 7;
testptr[3][1] = 7;

以上所有我希望工作正常,因为它们在4x2“数组”内。

现在我写到一个不应该分配的位置:

testptr[2][3] = 8;

并确保我写信给他们中的许多人:

for (i=0; i<1000; i++)
    testptr[3][i] = i;

在这些中,我都没有遇到分段错误或其他错误。

  1. 说我们正在写未分配的内存是否正确?
  2. 我们没有收到错误,是不是幸运,因为其他变量/进程没有保留那些未分配的内存位置?
  3. 我们可以假设这样做会导致程序其他方面的问题(段错误)吗?
  4. 感谢您的回答。

1 个答案:

答案 0 :(得分:3)

您的程序会调用未定义的行为。它会给出预期或意外的结果。无法保证访问数组越界会产生分段错误,否则会导致硬盘崩溃!