C-使用阵列的malloc和realloc时进行分割故障



我是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]);

而不是。

最新更新