C++ 如何在if语句中正确使用malloc()返回值?

C++ 如何在if语句中正确使用malloc()返回值?,c++,malloc,C++,Malloc,我想将if语句与malloc()函数一起使用。我有以下代码: if(uint16_t *buf = (uint16_t *) malloc(data_len*2) == NULL) exit(1); 但我得到了一个错误: error: cannot convert 'bool' to 'uint16_t*' in assignment 是我错了还是我必须改变密码 这是带括号等的原始代码: if((数据=malloc(数据长度))==NULL|| (buf=malloc(数据长度*2))==

我想将
if
语句与
malloc()函数一起使用。
我有以下代码:

if(uint16_t *buf = (uint16_t *) malloc(data_len*2) == NULL) exit(1);
但我得到了一个错误:

error: cannot convert 'bool' to 'uint16_t*' in assignment 
是我错了还是我必须改变密码

这是带括号等的原始代码:

if((数据=malloc(数据长度))==NULL||
(buf=malloc(数据长度*2))==NULL){
出口(1);
问题是运算符优先权,适用于C和C++两种。相等运算符
=
的优先级高于赋值
=
,因此条件表达式解析为

uint16_t *buf = ( (uint16_t *) malloc(data_len*2) == NULL)
在左驾上有一个
uint16_i*
,在右驾上有一个
bool
。看来你想要的是

(uint16_t *buf = (uint16_t *) malloc(data_len*2)) == NULL
另一方面,请注意,没有必要在C中放弃返回
malloc
(因为问题被标记为C)

<>和C++中,你应该认真考虑使用<代码> STD::vector < /Cord>避免手动内存分配。

< P>不要在C++中使用<代码> MalCube()/Cuff>,使用<代码>新[Type ] < /C> >而不是[Type ]是你的类型。

此外,尽可能使用类类型,因为这样可以节省大量内存管理

正如另一个答案所述,您应该记住赋值运算符的优先级比大多数其他运算符低得多;使用
()
强制优先,建议您在条件下执行而不是赋值,这会使代码变得凌乱


注意:虽然在这种情况下可以使用
malloc
,但在大多数情况下通常首选
new
,因为
new
调用类的构造函数(如果有)。在C++代码中使用<代码> MalOC 的主要原因是,如果您想用“代码> RealCalc< /Cuff>更改分配内存的大小。这些函数是原C库的一部分,并且已经被C++更多类型安全的操作符所取代,因此被劝阻。您提到的代码在这两个方面都不好,但原因不同。也就是说,错误是由各种运算符被评估的顺序引起的,它不是你想要的。添加一对括号<代码>如果((utu16*t*bf=(utu16*t**)Maloc(DATAYLLN * 2)= = null)< /C> >已经说过,C++中不需要MalCube()。这是一个C的东西。@ UlrichEckhardt,原始C代码,当这个,BUF=Maloc(DATAYLLN * 2)=NULL,我问社区如何在C++中使用。它将使用异常发出分配失败的信号,这样您就不会用无用的检查使代码混乱。这就是说,你应该在C++中使用StistaQuestCube,但是其他的评论是正确的,首先不要使用MalCube()。顺便说一下:在你的版本中考虑<代码> BUF < /代码>的范围!那么
new
将如何解决这个问题呢?以
std::string
类为例,它省去了手动分配数据的麻烦,而且也是动态的。我会把它改为内存管理,如果他使用C++,新的调用构造函数;malloc是Cfunction@Isaiah使用
new
的建议是可以的,但是如果OP需要使用
malloc()
或者只是好奇出了什么问题,那么您的答案并不能回答这个问题。调用
uint16\u t
的不存在构造函数如何帮助OP解决编译器错误?