偶然的,我写了
if (var < 0 | List == NULL) {
...
}
其中var
是int
并列出int*
(整数数组)。
我打算写
if (var < 0 || List == NULL) {
...
}
我知道
运算符|,&amp;和〜并行地对各个位进行操作。他们能 仅用于整数类型。 a | b进行独立的OR操作 a的每个比特与b的相应比特一起产生该比特 结果。
来自here。
我不明白的是valgrind(选项--leak-check=full
)在第一种情况下给了我错误Invalid read of size 8
而在第二种情况下没有错误。
我认为var
和List
的数据访问在两种情况下都是相同的。
List == NULL
的结果是什么类型?
答案 0 :(得分:3)
&#34;我认为
var
和List
的数据访问权限相同 例&#34;
不,差异是short-circuit evaluation。使用逻辑OR时,List == NULL
时不会计算表达式var < 0
。
但是使用按位OR,即使List == NULL
, 也会评估var < 0
。为什么会触发&#34;无效读取大小为8&#34;很难说,因为你没有显示足够的代码。但我怀疑List
时未初始化var < 0
。