1

不小心写了

if (var < 0 | List == NULL) {
   ...
}

其中var是 anint和 List a int*(整数数组)。

我的意思是写

if (var < 0 || List == NULL) {
   ...
} 

我知道

运算符 |、& 和 ~ 并行作用于各个位。它们只能用于整数类型。一个 | b 对 a 的每个位与 b 的相应位进行独立的 OR 运算,以生成该位结果。

从这里引用。

我不明白的是valgrind(带有选项--leak-check=full)在第一种情况下给了我错误Invalid read of size 8,而在第二种情况下没有错误。

var我认为在这两种情况下对和的数据访问List是相同的。

结果是什么类型的List == NULL

4

1 回答 1

3

var“我认为两种情况下对和的数据访问List是相同的。”

不,区别在于短路评估。使用逻辑 OR 时,表达式List == NULL不会被计算var < 0

但是使用按位,即使List == NULL. var < 0很难说为什么会触发“大小为 8 的无效读取”,因为您没有显示足够的代码。但我怀疑List是没有初始化的时候var < 0

于 2018-02-02T07:50:47.053 回答