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