我正在尝试malloc并初始化一个数组,并通过传入的指针将其返回给调用函数。 (克++)
例如:
float* buff;
allocateBuff(&buff);
buff[0] = 2.3;
free(buff);
int allocateBuff(float** buffer)
{
*buffer = (float*) malloc(sizeof(float)*1);
return 0;
}
然而,这段错误。
答案 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数组以提高安全性。)