编译器升级后,我遇到了新的警告消息。

事实证明inx是一个指针。通常,我希望看到这个旧代码与0或NULL进行比较。这使我考虑了有符号和无符号的值以及可能的风险。
一些研究表明:

  • A pointer greater than zero in c++, what does mean?
  • Can a pointer (address) ever be negative?
  • memory address positive or negative value in c?
  • malloc returns negative value

  • 这些似乎表明一个地址(由malloc返回)永远不能为零。
    这将我带到了标准的旧版本。

    它特别指出两个空指针比较相等。
    考虑到这一点,那小段代码是未定义的行为吗?还是我想念的难题还有另外一块?

    最佳答案

    这不是不确定的行为,但是如果inx不为null,则结果不确定。



    因此,您可以确保如果inx为null,则条件代码将不会执行-但如果不是null,则不会执行。比较可能应该是inx != 0,当且仅当inx不为null时,该定义才正确。

    关于c++ - 无效* p…; if(p> 0)…这是未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23200872/

    10-11 04:23