malloc - 从 void* 到 double* 的无效转换
malloc - invalid conversion from void* to double*
我想编写一个使用指针创建双精度数组副本的函数。
到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
double* copy (double *array, int size)
{
double *v=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
*(v+i)=*(array+i);
return v;
}
int main ()
{
//double array[];
int size;
printf ("size= "); scanf ("%i",&size);
double *array=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
scanf("%f",&array[i]);
copy(array,size);
free(array);
}
我有 2 个无法消除的编译错误。我得到
invalid conversion from void* to double*
当我尝试使用 malloc 分配内存但我无法理解我做错了什么时。
您正在使用 C++ 编译器。
double *array=malloc(sizeof(double)*size);
在 C 中有效。存在从任何对象指针类型到 void *
的隐式转换。
在 C++ 中它是无效的,没有这样的隐式转换,你需要一个转换:
double *array= (double *) malloc(sizeof(double)*size);
您正在使用 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 中,不需要强制转换,事实上,除了隐藏程序中的错误之外,它还使代码不必要地丑陋,请在此处 cehck Do I cast the result of malloc?。
我想编写一个使用指针创建双精度数组副本的函数。 到目前为止,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
double* copy (double *array, int size)
{
double *v=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
*(v+i)=*(array+i);
return v;
}
int main ()
{
//double array[];
int size;
printf ("size= "); scanf ("%i",&size);
double *array=malloc(sizeof(double)*size);
for (int i=0; i<size; i++)
scanf("%f",&array[i]);
copy(array,size);
free(array);
}
我有 2 个无法消除的编译错误。我得到
invalid conversion from void* to double*
当我尝试使用 malloc 分配内存但我无法理解我做错了什么时。
您正在使用 C++ 编译器。
double *array=malloc(sizeof(double)*size);
在 C 中有效。存在从任何对象指针类型到 void *
的隐式转换。
在 C++ 中它是无效的,没有这样的隐式转换,你需要一个转换:
double *array= (double *) malloc(sizeof(double)*size);
您正在使用 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 中,不需要强制转换,事实上,除了隐藏程序中的错误之外,它还使代码不必要地丑陋,请在此处 cehck Do I cast the result of malloc?。