C:不能与void类型的右值初始化变量*
问题描述:
我有以下代码:C:不能与void类型的右值初始化变量*
int *numberArray = calloc(n, sizeof(int));
而且我无法理解为什么我收到以下错误。
Cannot initialize a variable of type 'int *' with an rvalue of type 'void *'`.
谢谢。
答
编译器的错误信息非常清楚。
返回值calloc
是void*
。您正在将其分配给类型为int*
的变量。
这与C程序没关系,但与C++程序无关。
可以该行更改为
int* numberArray = (int*)calloc(n, sizeof(int));
但是,一个更好的选择将是使用new
运营商分配内存。毕竟,你正在使用C++。
int* numberArray = new int[n];
答
您正在C++代码中使用C内存重新分配样式。 要使用什么是用C++ new
所以,你的代码将变为:
int n = 10; //n = size of your array
int *narray = new int[n];
for (int i = 0; i < n; i++)
cout << narray[i];
另外,您可以切换回C和使用释放calloc与铸造。
int* numberArray = (int*)calloc(n, sizeof(int));
答
void* calloc (size_t num, size_t size);
分配和零初始化数组。 为num元素数组分配一个内存块,每个元素的大小都是字节长度,并将其所有位初始化为零。有效的结果是分配(num * size)个字节的零初始化内存块。
成功时,指向由函数分配的内存块的指针。 这个指针的类型总是void *,它可以被转换为所需类型的数据指针以便可解引用。 如果函数未能分配请求的内存块,则返回空指针。
总之,由于内存分配成功calloc
回报void*
(通用指针),你将不得不在C++到类型转换这样的:
int *numberArray = (int*)calloc(n, sizeof(int));
如果是C,你仍然可以跳过这个剧组。
或者,使用new
为:
int *numberArray = new int [n];
答
语法释放calloc是:
无效*释放calloc(为size_t NUM,为size_t大小);
calloc返回void指针。在你的代码中,你正试图将void指针指定给整数指针。所以你得到了无法初始化类型为'void *'的右值'int *'的变量。所以在指定它之前,先指定void指针
* numberArray =(int *)calloc(n,sizeof(int));
'int * numberArray =(int *)calloc(n,sizeof(int));'它叫做铸造。 – deviantfan
在C++中,'malloc'和'calloc'需要类型转换。 –
是否没有'calloc'的文档了? – juanchopanza