【发布时间】:2016-10-09 23:09:47
【问题描述】:
我正在使用这行代码为结构动态分配内存:
if (DrinkMachine = (Drink_Machine*)malloc(sizeof(DrinkMachine) * size) == NULL)
return(NULL);
我也试过了:
if (DrinkMachine = (Drink_Machine*)malloc(sizeof(DrinkMachine[size])) == NULL)
return(NULL);
现在,由于我的代码(某处)出现错误,它无法动态分配内存,并且指针确实为 NULL。但是,它不会返回 NULL,或者尝试输入 if 语句,即使它应该为真。什么给了?
编辑:附加信息。当我单步调试调试器时,我的结构中的每个项目都会在手表中显示“无法读取内存”。不知道这是否对任何人有帮助,但我想我会把它添加到问题中。
Edit2:所以这个答案得到了回答,我只是想让它在编辑中可见。
if ((DrinkMachine = (Drink_Machine*)malloc(sizeof(Drink_Machine) * size)) == NULL)
return NULL;
这是键入此内容的正确方法。请注意,我还编辑了代码以在 sizeof() 中正确显示 Drink_Machine。不包括那是一个错字。其他人则表示,显然,单独声明代码然后在下一条语句中测试指针更聪明。 (并纠正了一个错字)
感谢所有花时间回答这个问题的人!
【问题讨论】:
-
@PaulRooney,一个是(选择不当)变量名,另一个是类型。没有错。
-
@StoryTeller 如果他使用 Visual Studio,他可以投射
-
如果你写了
DrinkMachine = malloc( ... ); if (NULL == DrinkMachine) {...},你就不会遇到这个问题。保存那一行代码值得吗? -
@self,拥有 Visual Studio 是做任何事情的一个糟糕的理由,尤其是用被认为越来越糟糕的风格写作。