[英]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个索引在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]
至d[499]
分配了内存,但是您正在调用d[500]
该值的值未定义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.