long int d[500], i;
d[1] = 1;
d[2] = 2;
d[3] = 4;
for(i = 4; i<=500; i++)
d[i] = d[i-1] + d[i-2] + d[i-3];
int n = 500;
printf("%ld\n", d[500]);
编译器是gcc。编译时发生总线错误。造成这种情况的原因是什么?
答案 0 :(得分:4)
long int d[500]
声明一个包含从0
到499
索引的500个项目的数组
d[500]
超出了数组的范围。
答案 1 :(得分:2)
printf("%ld\n", d[500]);
- 访问数组之外。
d[i] = d[i-1] + d[i-2] + d[i-3];
- 访问数组之外。
答案 2 :(得分:2)
long int d[500];
....
for(i = 4; i<=500; i++)
^^^^^^
你写了传递分配内存的界限导致未定义的行为
您应该只访问从索引0
到499
的数组元素,因为这是您分配的内容。
答案 3 :(得分:0)
long int d[500]
为您提供500
个长整数的记忆,并为d[0]
分配给d[499]
,但您正在调用d[500]
,其值未定义