C 数组元素改变值

C 数组元素改变值,c,arrays,C,Arrays,我定义了三个数组。一旦分配了第一个元素,我就会打印出它的第一个元素,这与预期的一样。然后,分配第二个数组(“有问题”)。当我重新打印第一个数组的第一个元素时,它神奇地变为我分配给数组“有问题”的值。更奇怪的是。如果我选择不在两个print语句之间分配数组“有问题”,而是“工作”,那么一切都正常 发生什么事了 #include<stdio.h> int problem(double variable); int main(){ problem(1.0); retur

我定义了三个数组。一旦分配了第一个元素,我就会打印出它的第一个元素,这与预期的一样。然后,分配第二个数组(“有问题”)。当我重新打印第一个数组的第一个元素时,它神奇地变为我分配给数组“有问题”的值。更奇怪的是。如果我选择不在两个print语句之间分配数组“有问题”,而是“工作”,那么一切都正常

发生什么事了

#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;
}
#包括
int问题(双变量);
int main(){
问题(1.0);
返回0;
}
整数问题(双变量){
int limit1=10;
int limit2=10;
双bin_界[limit1];
双重问题[limit2];
双重工作[limit2];
//分配第一个数组

对于(int-bin=0;bin它的数组超出了界限,您正在分配索引为0到9的10个元素,但您正在访问索引10。您的循环应该仅为

for (int el=0;el<limit2;el++){problematic[el]=2.;}

for(int el=0;el使用valgrind运行并检查是否正在访问无效内存。在声明数组时,使用0初始化它。

投票赞成发布。欢迎使用StackOverflow。`for(int el=0;el for loop没有分配第一个数组,它正在填充数组。上面已经分配了数组。对不起,我刚才把它弄糟了。在原始代码中,两个循环边界实际上都有相同的值。在这里编辑了它。@user6566791没有marcadian说你需要更改,非常感谢-这确实是错误在涉及同一部件的所有其他功能中,这一点都是正确的,但在检查有故障的部件时却不够仔细。