C ++:malloc:错误:从'void *'到'uint8_t *'的无效转换

时间:2010-10-24 22:58:33

标签: c++

我遇到了这个问题:

  

从'void *'无效转换为'uint8_t *'

这样做时:

int             numBytes;
uint8_t         *buffer;

buffer=malloc(numBytes); //error here, why?

或者我必须这样说吗?

buffer=malloc(numBytes); 

请解释一下。

3 个答案:

答案 0 :(得分:18)

你不能在C ++中隐式地从void *强制转换(在这方面与C不同)。你可以这样做:

buffer = static_cast<uint8_t *>(malloc(numBytes));

但实际上,您应该使用new / delete代替malloc / free

答案 1 :(得分:2)

Malloc返回一个void指针;当你使用它时,你必须将返回值强制转换为指向你存储在其中的数据类型的指针。

buffer = (uint8_t *) malloc(numBytes); 

答案 2 :(得分:2)

在C ++中,不允许简单地将一种类型的指针分配给另一种类型的指针(因为规则总是存在异常。例如,有效地指定任何指向void指针的指针。)< / p>

你应该做的是将你的void指针转换为uint8_t指针:

buffer = (uint8_t *) malloc (numBytes);

注意:这只在C ++中是必需的,在C中允许混合和匹配指针。大多数C编译器会发出警告,但它是有效的代码。

由于你正在使用C ++,你也可以像这样使用new和delete:

buffer = new uint8_t[numBytes];

并使用以下方法摆脱缓冲区:

delete[] buffer;

一般情况下,除非必须与c库接口,否则不应使用malloc和free。