C数组元素改变了价值

时间:2018-01-11 21:52:08

标签: c arrays

我定义了三个数组。一旦分配了第一个元素,我就会打印出第一个符合预期的元素。然后,分配第二个阵列(有问题的')。当我重新打印第一个数组的第一个元素时,它神奇地改变为我分配数组的值'有问题的'用。它变得更加怪异。如果我选择不分配数组'有问题的'但是'工作'在两个印刷语句之间,一切正常。

发生了什么?

#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;
}

2 个答案:

答案 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。