我在C中声明了一个多维数组,如下所示:
int arr[4][2];
int length = 0;
但我显然可以添加尽可能多的元素:
void addStuff(){
arr[length][0] = someVal;
arr[length++][1] = someVal;
}
它没有任何错误。这是否意味着我在无人区的某处腐蚀了我的记忆?或者这是我不知道的C的一些特征?
答案 0 :(得分:9)
如果您指定了数组大小,那么您肯定会在某处损坏内存 - 程序可能会出现段错误,或者其他数据可能已损坏,或者(可能)(表面上看)行为正常。默认情况下,C中没有边界检查。
答案 1 :(得分:2)
你肯定会腐蚀一些记忆。在执行程序时,它会给你一个名为“Undefined Behaviour”的精彩错误。
在C中,作为程序员,您有责任确保不会发生Out of Bound Array Write。
答案 2 :(得分:1)
C没有任何数组边界检查。所以,是的,你正在某处操纵记忆。如果运气好的话,会立即导致程序崩溃。如果你运气不好,你正在操纵一些有效数据,导致一段时间后崩溃,你的程序像以前一样工作或你的硬盘格式化。