计算内存块中所有数字的总和和数组中所有元素的总和

标签 c pointers

编译下面的程序时,终端给我以下信息 “双重自由或腐败(出局)”。我想创建一个程序,首先计算数组中所有元素的总和,请参见下面的 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/

相关文章:

c - 为字符数组的strlen分配空间时为什么要加1?

c - 为什么不同指针的大小不同

c - 如何声明从结构到最终数组的指针

c - C 中的整数指针?

c - 使用写入功能打印扩展的 ascii

c - 此函数输出的说明

c - 将功能指令依次放入程序存储器中

c - 如何判断一个点是否在边界内?

C 2D 字符数组 ("Warning initialization from incompatible pointer")

c++ - 一元 '*' 的无效类型参数(有 'bool' )