C中的数组大小

时间:2012-06-15 14:29:48

标签: c multidimensional-array

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

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

但我显然可以添加尽可能多的元素:

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

它没有任何错误。这是否意味着我在无人区的某处腐蚀了我的记忆?或者这是我不知道的C的一些特征?

3 个答案:

答案 0 :(得分:9)

如果您指定了数组大小,那么您肯定会在某处损坏内存 - 程序可能会出现段错误,或者其他数据可能已损坏,或者(可能)(表面上看)行为正常。默认情况下,C中没有边界检查。

答案 1 :(得分:2)

你肯定会腐蚀一些记忆。在执行程序时,它会给你一个名为“Undefined Behaviour”的精彩错误。

在C中,作为程序员,您有责任确保不会发生Out of Bound Array Write。

答案 2 :(得分:1)

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