我在 C 中声明了一个多维数组,如下所示:
int arr[4][2];
int length = 0;
但我显然可以添加任意数量的元素:
void addStuff(){
arr[length][0] = someVal;
arr[length++][1] = someVal;
}
它不会给出任何错误。这是否意味着我在无人区某处破坏了我的记忆?或者这是 CI 不知道的某些功能?
我在 C 中声明了一个多维数组,如下所示:
int arr[4][2];
int length = 0;
但我显然可以添加任意数量的元素:
void addStuff(){
arr[length][0] = someVal;
arr[length++][1] = someVal;
}
它不会给出任何错误。这是否意味着我在无人区某处破坏了我的记忆?或者这是 CI 不知道的某些功能?
如果您分配超过数组大小,那么您肯定会在某处损坏内存 - 程序可能会出现段错误,或者其他数据可能会损坏,或者它可能(意外)行为正确。默认情况下,C 中没有边界检查。
你肯定会破坏一些内存。在执行程序时,它会给你一个名为“未定义行为”的奇妙错误。
在 C 中,作为程序员,您有责任确保不会发生超出范围的数组写入。
C 没有任何数组边界检查。所以是的,你在某处操纵记忆。如果你很幸运,那将立即导致你的程序崩溃。如果你不走运,你正在操纵一些有效数据,导致一段时间后崩溃,你的程序像以前一样工作,或者你的硬盘被格式化。