我想了解这里发生了什么,更确切地说,为什么我在写入内存位置时没有收到分段错误,根据我的理解,我没有分配。
假设我要定义一个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;
在这些中,我都没有遇到分段错误或其他错误。
感谢您的回答。
答案 0 :(得分:3)
您的程序会调用未定义的行为。它会给出预期或意外的结果。无法保证访问数组越界会产生分段错误,否则会导致硬盘崩溃!