当前位置: 首页 > 知识库问答 >
问题:

通过“myPtr>0”检查空指针

楚流觞
2023-03-14

在一些遗留代码中,我遇到了以下空指针检查。

if( myPtr > 0 ) {
...
}

通过此if检查检查空指针是否存在技术风险?

共有3个答案

魏彦
2023-03-14

正如其他人所说,比较是无效的,因此行为取决于编译器。许多OSES认为指针是有符号的,因为它们将地址空间分成半个,而负的部分属于内核,所以编译器可能会为<代码> MyPTR发出有符号的比较。

有几个案例我见过编译器认为指针是有符号的,但是我现在找不到它们。但是一个值得注意的例子是视窗中的POINTER_SIGNEDPOINTER_UNSIGNED宏,它们解析为__sptr__uptr

另见

  • 比较指针到负值
  • 必须在所有平台的用户空间中分配内存地址为正
  • C中的指针比较是有符号的还是无符号的?
庞元青
2023-03-14

0是一个空常量。所以这相当于ptr

问题是<代码>

例如,假设px是一个指向数组的指针,它当前指向第一个元素

利用这种知识,编译器可以理解重构和重写循环边界,这反过来又可以让编译器生成更快的代码。

但这也意味着px

简而言之,要非常小心指针比较。

同时,null和任何其他指针之间的相等性得到了很好的定义。

另外,std::更少的保证行为良好,并同意

在这种情况下,正确的重写是:

if(myPtr!=nullptr)

如果myPtr不是指针,或

if(myPtr)

如果myPtr是一种有符号的数字类型,那么你就有可能改变行为。我会先做。

宦宏爽
2023-03-14

在C语言中,指针和整数之间的有序比较格式不正确(即使整数是空指针常量,如本例中的情况)。风险在于编译器被允许并且确实拒绝编译此类代码。

您可以将其重写为以下任一项:

if(myPtr != nullptr)
if(myPtr)
 类似资料:
  • 问题内容: 有一些模式可用于检查方法的参数是否已赋值。 首先,经典的。在自制代码中很常见,并且很容易理解。 其次,您可以使用现有框架。该代码看起来更好一些,因为它仅占用一行。缺点是它可能调用另一个方法,这 可能 会使代码的运行速度慢一些,具体取决于编译器。 第三,您可以尝试调用对对象没有副作用的方法。乍一看可能很奇怪,但它的令牌少于上述版本。 我还没有看到广泛使用的第三种模式,感觉就像我自己发明了

  • 本文向大家介绍sitecore 空/空检查,包括了sitecore 空/空检查的使用技巧和注意事项,需要的朋友参考一下 示例 IsNotNull 这是一种非常简单且流行的方法,用于检查项目是否不为空。它只是检查传入的对象是否为空。 IsNotNullOrEmpty 这与上面的IsNotNull相同,但是适用于字符串值而不是对象。 一片空白 这只是该IsNotNull()方法的逆过程。此方法断言该对

  • DescriptionServer遇到了一个内部错误(),它无法满足此请求。 例外 jasperException:java.lang.NullPointerException根本原因 NullPointerException

  • 本文向大家介绍php通过各种函数判断0和空,包括了php通过各种函数判断0和空的使用技巧和注意事项,需要的朋友参考一下 函数对0的判断 对空的判断 补充:下面给大家介绍下php 语法里0不等于null为空的解决办法 今天遇到这样一个问题是这样的: php 语句里,我想判断一个值大于等于0. 我是使用 ($value !=null && $value >=0), 返回的结果为空,这点真的好奇怪。 实

  • 问题内容: 我有的: 我有jQuery AJAX函数,可在查询数据库后返回HTML。根据查询结果,该函数将返回HTML代码,或者根据需要返回任何内容(即空白)。 我需要的: 我需要有条件地检查数据何时为空。 我的代码: 我的问题: 我尝试了多种条件,但都无法正确检查数据。根据我的发现,警告消息为空并不表示数据是 空的 不存在的 等于零 长度为零 空值 未定义 如果这些都不是,那么我该如何有条件地检