【问题标题】:Can Bitwise Operation on NULL value crash the code in C++NULL 值的按位运算能否使 C++ 中的代码崩溃
【发布时间】:2018-12-21 08:39:59
【问题描述】:

似乎我的程序在这一行崩溃了,我对填充了 NULL 值的“a”数组(空数组)进行了一些按位操作,这会导致程序崩溃吗?

const unsigned char a [ something ];
int b;
b = (a[0] & 0x0f) << 8; 

【问题讨论】:

  • 字符永远不会为 NULL。字符数组的末尾可以有一个 0 来终止一个字符串,但即使这样也是一个有效的 char 值。
  • 您的程序甚至可能无法编译,因为需要初始化一个 const 值。请出示您的实际代码。
  • 您的程序包含未定义的行为。如果程序在该特定行崩溃,并不意味着问题出在该行。尝试隔离问题,并提供minimal reproducible example
  • 没有空数组这种东西。

标签: c++ null bitwise-operators nullable bit-shift


【解决方案1】:

不,下面的代码

const unsigned char a [ something ];
int b;
b = (a[0] & 0x0f) << 8; 

本身不会导致您的程序崩溃。您的代码还有其他问题。

【讨论】:

  • 虽然不太可能导致崩溃,但a 没有初始化,a[0] 实际上是未定义的行为。
  • 对不起,缺少信息,这个 char a 是作为参数给函数的,但是这个参数是从 nullpointer 调用的一些“get...()”函数,所以我猜这是导致崩溃,我分析崩溃日志的工具指向我原始帖子中的行,这让我很困惑......谢谢大家的回答
  • @Bodega 是的,如果 a 是空指针,很容易导致崩溃。
猜你喜欢
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多