有效地分配和分配给内存

问题描述 投票:0回答:1

我想创建一个新的值数组,我不知道如何有效地执行此操作。由于要创建新数组,我必须调用一个函数,将旧数组作为参数传递。现在我的代码看起来像:

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;
}

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

c malloc variable-assignment dynamic-memory-allocation
1个回答
0
投票

这条线没用:

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

写这个:

newMeasurements1 = calcNewArray(oldArray);

malloc已在calcNewArray完成。

但是在calcNewArray中还有另一个问题,当你将它们传递给函数时,数组会衰减指向它们的第一个元素,因此sizeof(oldArray)不是你传递给calcNewArray的数组的sizte b,但它是指针的大小。你需要明确地传递oldArray的大小作为第二个参数:

float *calcNewArray(float *oldArray, int oldsize) {
    float *newArray;

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

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

    return newArray;
}
© www.soinside.com 2019 - 2024. All rights reserved.