编译下面的程序时,终端给我以下信息 “双重自由或腐败(出局)”。我想创建一个程序,首先计算数组中所有元素的总和,请参见下面的 x。那我要 计算指针指向的内存块中所有数字的总和,请参见下面的 y。我认为问题在于赋值“y=x;”
int main(void)
{
double x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
printf("The sum is %f\n", sum(x, 10));
double *y = malloc(sizeof(double)*10);
y = x;
printf("The sum is %f\n", sum(y, 10));
free(y);
return 0;
}
最佳答案
赋值 y = x
覆盖了 malloc()
ed 指针,你最终 free()
了一个堆栈变量 1 这是未定义的行为。而且,malloc()
ed 指针永远不会被free()
ed。
从你的代码来看,你似乎根本不需要malloc()
2。但如果需要,那么这可能就是您所需要的
double *y;
y = malloc(10 * sizeof(*y));
if (y == NULL)
return -1;
for (int i = 0 ; i < 10 ; ++i)
y[i] = i + 1;
printf("The sum is %f\n", sum(y, 10));
free(y);
1你实际上free()
x
的地址。
2您可以调用 sum(x, 10)
。
关于计算内存块中所有数字的总和和数组中所有元素的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36919449/