总线错误 - 这段代码有什么问题?

时间:2013-01-28 05:20:40

标签: c gcc compiler-construction bus bus-error

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。编译时发生总线错误。造成这种情况的原因是什么?

4 个答案:

答案 0 :(得分:4)

long int d[500]声明一个包含从0499索引的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++)
            ^^^^^^

你写了传递分配内存的界限导致未定义的行为 您应该只访问从索引0499的数组元素,因为这是您分配的内容。

答案 3 :(得分:0)

long int d[500]为您提供500个长整数的记忆,并为d[0]分配给d[499],但您正在调用d[500],其值未定义