2

我在 C 中声明了一个多维数组,如下所示:

int arr[4][2];
int length = 0;

但我显然可以添加任意数量的元素:

void addStuff(){
    arr[length][0] = someVal;
    arr[length++][1] = someVal;
}

它不会给出任何错误。这是否意味着我在无人区某处破坏了我的记忆?或者这是 CI 不知道的某些功能?

4

3 回答 3

9

如果您分配超过数组大小,那么您肯定会在某处损坏内存 - 程序可能会出现段错误,或者其他数据可能会损坏,或者它可能(意外)行为正确。默认情况下,C 中没有边界检查。

于 2012-06-15T14:31:39.233 回答
2

你肯定会破坏一些内存。在执行程序时,它会给你一个名为“未定义行为”的奇妙错误。

在 C 中,作为程序员,您有责任确保不会发生超出范围的数组写入。

于 2012-06-15T14:32:40.480 回答
1

C 没有任何数组边界检查。所以是的,你在某处操纵记忆。如果你很幸运,那将立即导致你的程序崩溃。如果你不走运,你正在操纵一些有效数据,导致一段时间后崩溃,你的程序像以前一样工作,或者你的硬盘被格式化。

于 2012-06-15T14:33:07.373 回答