gpt4 book ai didi

c - 使用按位或时读取无效

转载 作者:太空宇宙 更新时间:2023-11-04 01:48:29 25 4
gpt4 key购买 nike

一不小心,我写了

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

其中 var 是一个 int 并且 List 是一个 int*(整数数组)。

我想写

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

我知道

The operators |, &, and ~ act on individual bits in parallel. They can be used only on integer types. a | b does an independent OR operation of each bit of a with the corresponding bit of b to generate that bit of the result.

引自 here .

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

我认为 varList 的数据访问在这两种情况下是完全相同的。

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

最佳答案

"I think the data access to var and List is the very same in both cases."

不,区别是short-circuit evaluation .使用逻辑或,表达式 List == NULL var < 0 时不会计算.

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

关于c - 使用按位或时读取无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48577676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com