我遇到了这个问题:
从'void *'无效转换为'uint8_t *'
这样做时:
int numBytes;
uint8_t *buffer;
buffer=malloc(numBytes); //error here, why?
或者我必须这样说吗?
buffer=malloc(numBytes);
请解释一下。
答案 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。