C 数组元素改变值
我定义了三个数组。一旦分配了第一个元素,我就会打印出它的第一个元素,这与预期的一样。然后,分配第二个数组(“有问题”)。当我重新打印第一个数组的第一个元素时,它神奇地变为我分配给数组“有问题”的值。更奇怪的是。如果我选择不在两个print语句之间分配数组“有问题”,而是“工作”,那么一切都正常 发生什么事了C 数组元素改变值,c,arrays,C,Arrays,我定义了三个数组。一旦分配了第一个元素,我就会打印出它的第一个元素,这与预期的一样。然后,分配第二个数组(“有问题”)。当我重新打印第一个数组的第一个元素时,它神奇地变为我分配给数组“有问题”的值。更奇怪的是。如果我选择不在两个print语句之间分配数组“有问题”,而是“工作”,那么一切都正常 发生什么事了 #include<stdio.h> int problem(double variable); int main(){ problem(1.0); retur
#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说你需要更改,非常感谢-这确实是错误在涉及同一部件的所有其他功能中,这一点都是正确的,但在检查有故障的部件时却不够仔细。