函数内部数组的动态分配

时间:2014-11-18 07:25:29

标签: c++ c

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

例如:

float* buff;
allocateBuff(&buff);
buff[0] = 2.3;
free(buff);

int allocateBuff(float** buffer)
{
  *buffer = (float*) malloc(sizeof(float)*1);

   return 0;
}

然而,这段错误。

3 个答案:

答案 0 :(得分: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] : %f\n", 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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试这样的事情:

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数组以提高安全性。)