malloc - 从void *到double *的无效转换

时间:2015-05-06 21:35:41

标签: c malloc

我想编写一个使用指针创建双数组副本的函数。 到目前为止,这是我的代码:

collection.deleteMany( bson )

我有2个编译错误,我无法摆脱。我得到了

  

从void *无效转换为double *

当我尝试使用malloc分配内存但我无法理解我做错了什么。

2 个答案:

答案 0 :(得分:37)

您使用的是C ++编译器。

double *array=malloc(sizeof(double)*size);

在C中有效。存在从任何对象指针类型到void *的隐式转换。

在C ++中它无效,没有这种隐式转换,你需要一个强制转换:

double *array= (double *) malloc(sizeof(double)*size);

答案 1 :(得分:6)

您正在使用c ++编译器编译c代码。

当你使用c ++编译器时,你应该编写c ++代码,所以malloc()在c ++中并不常见,而是

double *data = new double[size];

将是很好的c ++代码,如果你需要free()指针,你需要

delete[] data;

你当然可以在c ++中使用malloc(),但它就像这样

double *data = static_cast<double *>(malloc(size * sizeof(double));

因为c ++中的void *没有自动转换为任何指针类型。

然而,在c中,不需要演员表,事实上,除了隐藏程序中的错误之外,它会使代码变得不必要地丑陋,请点击此处Do I cast the result of malloc?