函数内部数组的动态分配

Dynamic Allocation of Array Inside of a Function

本文关键字:动态分配 数组 内部 函数      更新时间:2023-10-16

我正在尝试 malloc 并初始化一个数组,并通过传入的指针将其返回给调用函数。(g++)

前任:

float* buff;
allocateBuff(&buff);
buff[0] = 2.3;
free(buff);
int allocateBuff(float** buffer)
{
  *buffer = (float*) malloc(sizeof(float)*1);
   return 0;
}

但是,这个赛格错误。

您的function return必须与您希望返回的指针类型匹配。如果要分配一个 float 数组,则函数的类型必须是 float * 。下面是一个快速示例:

#include <stdio.h>
#include <stdlib.h>
float *allocateBuff(float** buffer, int size)
{
    /* allocate array of floats */
    *buffer = calloc(size, sizeof(*buffer));
    return *buffer;
}
int main() {
    float *array = NULL;
    array = allocateBuff (&array, 10);
    int i;
    for (i = 0 ; i < 10; i++)
        array[i] = (float)i;
    for (i = 0 ; i < 10; i++)
        printf ("array [%d] : %fn", i, array[i]);
    if (array) free (array);
    return 0;
}

输出:

$ ./bin/initfloat
array [0] : 0.000000
array [1] : 1.000000
array [2] : 2.000000
array [3] : 3.000000
array [4] : 4.000000
array [5] : 5.000000
array [6] : 6.000000
array [7] : 7.000000
array [8] : 8.000000
array [9] : 9.000000

此外,根本不需要将buffer传递给函数。您可以像以下那样轻松地定义函数:

float *allocateBuff (int size)
{
    /* allocate array of floats */
    float *buffer = calloc (size, sizeof(*buffer));
    return buffer;
}

然后使用以下命令在代码中初始化数组:

float *array = NULL;
array = allocateBuff (10);

好的,上面的代码确实有效,它在其他地方出错了。感谢您的所有回复。

尝试这样的事情:

int allocate(float **buffer)
{
    *buffer = new float(2.3f);
    return 0;
}
int allocateAsArray(float **buffer, unsigned size)
{
    *buffer = new float[size];
    return 0;
}
int main()
{
    float* buff = nullptr;
    // some operations ...
    delete buff;
    // or delete[] buff;
    return 0;
}

但是在C++中使用 C 型指针并不是一个好主意(我们更喜欢智能指针/STL 数组以提高安全性)。