我是C的新手,我正在尝试理解和掌握malloc。我的程序采用整数X输入,然后循环直到满足X,同时还采用其他整数输入。然后,我进行各种计算。但是我遇到了细分错误,我不明白为什么。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(void)
{
calculations();
}
void calculations()
{
int i;
int x;
int total = 0;
double squareRoot;
double overall;
scanf("%d", &x);
int* array = malloc(x * sizeof(int));
if (!array) {
printf("There isn't enough memory n");
return;
}
int c = 0;
while (c < x) {
scanf("%d", &array[i]);
total = array[i] * array[i];
c++;
}
squareRoot = sqrt(total);
array = realloc(array, x * sizeof(int));
int b = 0;
while (b < x) {
overall = array[i] / squareRoot;
printf("%.3f ", overall);
b++;
}
}
问题是
scanf("%d", &array[i])
在哪里,i
的值不确定。
为了详细说明, i
是一个非初始化的局部变量,除非明确初始化,否则内容仍然不确定。在这种情况下,尝试使用该值会导致调用不确定的行为。
即使您初始化i
,也从未在i
上操作,因此所有更改都将在固定索引上覆盖。您也必须照顾此案。
解决方案:查看代码,它可能需要使用
scanf("%d", &array[c]);
而不是。