0
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

4 回答 4

4

long int d[500]声明一个包含 500 个项目的数组,索引从0499

d[500]超出了数组的范围。

于 2013-01-28T05:23:50.160 回答
2

printf("%ld\n", d[500]);- 访问数组之外​​。

d[i] = d[i-1] + d[i-2] + d[i-3];- 访问数组之外​​。

于 2013-01-28T05:23:05.357 回答
2
long int d[500];
....
for(i = 4; i<=500; i++)
            ^^^^^^

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

于 2013-01-28T05:23:22.823 回答
0

long int d[500]为您提供500长数字整数的内存并分配给d[0]tod[499]但您正在调用d[500]其值未定义。

于 2013-01-28T05:54:20.340 回答