【发布时间】:2018-02-12 19:18:16
【问题描述】:
我正在尝试 C 中的语法,因为它对我来说是新的。我刚从数组、循环和随机数开始,所以我写了这个非常简单的测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL));
int arr[9];
for(int i=0; i<10; i++) {
arr[i] = rand();
printf("%d \n", arr[i]);
}
}
我用 gcc 编译它并从命令提示符运行。运行良好,打印数组中的每个元素......然后崩溃。为什么?代码逻辑有问题吗?
提前感谢您!这是我在这里的第一个问题,所以如果我在提问规则中犯了任何错误,我提前道歉。
【问题讨论】:
-
i < 10--->i < 9 -
该数组包含
9个元素。您正在访问10。 -
访问数组越界使程序行为错误(调用未定义的行为)。程序崩溃就是其中之一。
-
@JR C 中的一般规则:如果你非常非常幸运,编译器会发现你的错误。如果你只是幸运的话,你的错误会使程序崩溃。但如果你不走运,你的错误会悄悄地破坏其他地方的数据,或者导致程序稍后出现不可预测的行为。
-
还有,我怕你拿不到‘本月原创书名’奖:(