C-有效分配并分配给内存



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

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

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

这一行没有用:

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

只写下:

newMeasurements1 = calcNewArray(oldArray);

Malloc已经在calcNewArray中完成。

但是,calcNewArray中还有另一个问题,当您将它们传递到函数时,阵列会衰减到指针到其第一个元素,因此sizeof(oldArray)不是Sizte Bof您传递给calcNewArray的数组,但它是指针的大小。您需要将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;
}

相关内容

  • 没有找到相关文章

最新更新