高效地分配并分配给内存

时间:2019-02-15 10:28:33

标签: c malloc variable-assignment dynamic-memory-allocation

我想创建一个新的值数组,但不确定如何有效地执行此操作。自创建新数组以来,我必须调用一个函数,并将旧数组作为参数传递。现在,我的代码如下所示:

float *newMeasurements1;
newMeasurements1 = malloc(sizeof(calcNewArray(oldArray)));
newMeasurements1 = calcNewArray(oldArray);


float *calcNewArray(float *oldArray) {
    float *newArray;

    int new_size = sizeof(oldArray) - outliers;
    newArray = malloc((new_size) * sizeof(float));

    for (i = 0; i < new_size; i++) {
        newArray[i] = oldArray[i];
    }

    return newArray;
}

我不确定这是否是正确的方法,因为我必须调用一次函数才能知道新数组的大小。然后第二次调用该函数以将数组实际分配给分配的内存。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

此行无用:

newMeasurements1 = malloc(sizeof(calcNewArray(oldArray)));

只写这个:

newMeasurements1 = calcNewArray(oldArray);

malloc已在calcNewArray中完成。

但是calcNewArray中还有另一个问题,当您将数组传递给函数时,数组会衰减到指向其第一个元素的指针,因此sizeof(oldArray)并不是传递给{{1 }},但这是指针的大小。您需要明确地传递calcNewArray的大小作为第二个参数:

oldArray