gpt4 book ai didi

c - 对数组使用 malloc 和 realloc 时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:57:25 26 4
gpt4 key购买 nike

我是 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 是一个未初始化的局部变量,除非明确初始化,否则其内容将保持不确定。在这种情况下,尝试使用该值将导致调用 undefined behavior .

即使你初始化了i,你也从来没有对i进行操作,所以所有的改变都会在一个固定的索引上被覆盖。你也得处理这个案子。

解决办法:看代码,好像,你可能要用

scanf("%d", &array[c]);

相反。

关于c - 对数组使用 malloc 和 realloc 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42539248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com