我用这行代码为结构动态分配内存:
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语句,即使它应该为true。是什么给了什么?
编辑:附加信息。我的结构中的每个项目显示"无法读取内存"在手表中,当我单步执行调试器时。不知道这对任何人都有帮助,但我想我会把它添加到问题中。
Edit2:所以这回答了我只是想在编辑中看到它。
if ((DrinkMachine = (Drink_Machine*)malloc(sizeof(Drink_Machine) * size)) == NULL)
return NULL;
这是输入此内容的正确方法。注意,我还编辑了代码以在sizeof()中正确显示Drink_Machine。不包括那是一个错字。其他人已经表示,显然,单独声明代码然后在下一个语句中测试指针会更聪明。 (并修正了一个错字)
感谢所有花时间回答这个问题的人!
答案 0 :(得分:3)
您需要将赋值括在括号中以强制优先。
if((DrinkMachine = (Drink_Machine *)malloc(sizeof(Drink_Machine) * size)) == NULL) {
/* DrinkMachine is NULL */
}
答案 1 :(得分:2)
==
有higher precedence而不是=
。
因此首先计算==
(生成0
或1
)并将其分配给指针。
答案 2 :(得分:0)
关于这一行:
package pkg;
import org.rosuda.JRI.*;
public class Temp {
public static void main(String args[]) {
// Start Rengine.
Rengine r = new Rengine(new String[] { "--no-save" }, false, null);
if (!r.waitForR()) {
System.out.println("Cannot load R");
return;
}
r.eval("source(\'foo.R\')");
r.eval("a = foo(\"hi\")");
REXP a = r.eval("a");
System.out.println(a.toString());
}
}
1)不要从任何堆内存分配函数(malloc,calloc,realloc)转换返回的值
2)变量if (DrinkMachine = (Drink_Machine*)malloc(sizeof(DrinkMachine) * size) == NULL)
return(NULL);
必须是指针。所以表达式:DrinkMachine
将返回不是sizeof(DrinkMachine)
大小的指针大小。
3)语法也不正确。它应该是:
Drink_Machine
4)当系统函数返回错误指示时,应该遵循该错误的识别:(在这种情况下)
if ( (DrinkMachine = malloc(sizeof(*DrinkMachine) * size) ) == NULL)
return(NULL);