我定义了三个数组。一旦分配了第一个元素,我就会打印出第一个符合预期的元素。然后,分配第二个阵列(有问题的')。当我重新打印第一个数组的第一个元素时,它神奇地改变为我分配数组的值'有问题的'用。它变得更加怪异。如果我选择不分配数组'有问题的'但是'工作'在两个印刷语句之间,一切正常。
发生了什么?
#include<stdio.h>
int problem(double variable);
int main(){
problem(1.0);
return 0;
}
int problem(double variable){
int limit1 = 10;
int limit2 = 10;
double bin_bounds[limit1];
double problematic[limit2];
double working[limit2];
// Allocate first array
for (int bin=0; bin<limit1; bin++){
bin_bounds[bin] = variable/limit1 * (bin+1);
}
printf("%f\n\n",bin_bounds[0]); // prints 0.2 as excpected
for (int el=0;el<=limit2;el++){problematic[el]=2.;}
printf("%f\n\n",bin_bounds[0]); // prints 2.0
return 0;
}
答案 0 :(得分:6)
它的数组超出范围,你正在分配索引0到9的10个元素,但你正在访问索引10.你的循环应该只是
for (int el=0;el<limit2;el++){problematic[el]=2.;}
在这种情况下,big_bounds可能是在问题之后立即分配的。因此有问题[10]与big_bounds [0]
处于相同的内存地址答案 1 :(得分:0)
使用valgrind运行并检查是否正在访问无效内存。在声明数组初始化时为0。