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

oli*_*dev 4 c++

我遇到了这个问题:

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

这样做时:

int             numBytes;
uint8_t         *buffer;

buffer=malloc(numBytes); //error here, why?
Run Code Online (Sandbox Code Playgroud)

或者我必须这样说吗?

buffer=malloc(numBytes); 
Run Code Online (Sandbox Code Playgroud)

请解释一下.

Oli*_*rth 17

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

buffer = static_cast<uint8_t *>(malloc(numBytes));
Run Code Online (Sandbox Code Playgroud)

但实际上,你应该只使用new/ delete而不是malloc/ free!

  • 你可以从`void*`中``static_cast`,也许只是因为`reinterpret_cast`会导致人们不必要地恐慌. (5认同)
  • 这不是reinterpret_cast <>的情况,您应该为实际希望人们重新检查代码的特定情况(特别是在移植时)保留这种情况. (3认同)