繁体   English   中英

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

[英]Bus error - What's wrong with this piece of code?

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个索引在0499

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++)
            ^^^^^^

您编写了已分配内存的边界,从而导致未定义行为
您应该只从索引0499访问数组元素,因为这是您分配的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM