马洛克会在 C++17 年返回"invalid pointer value"吗?



根据 C++17 [basic.compound]/3:

指针类型的每个值都是以下值之一:

指向对象或函数的指针
  • (指针被称为指向对象或函数(,或
  • 经过对象末尾的指针 (8.7(,或
  • 该类型的空指针值 (7.11(,或
  • 无效的指针值。

malloc函数返回指针值。让我们假设调用成功,因此返回值不为 null。malloc([c.malloc]( 的规范没有说明它在返回的存储中创建任何对象,因此"无效指针值"似乎是最不荒谬的类别。

这是有道理的。 它是一个"无效指针值",因为它不指向对象。

请参阅该部分的后面部分,其中说:

当指针值表示

的存储达到其存储持续时间结束时,指针值将变为无效

这意味着不是指针的"值"使其无效,而是它不指向有效对象。

这是正确的。

内存中该位置没有对象。记忆"属于你"。但是,指针是否有效不是由内存分配决定的,而是由它指向的对象是否存在决定的。此指针不指向任何对象,因此它是无效指针。

p0593rX,如果将来被采用,将改变这一点,基本上是在那里为你放一个对象。这实际上非常重要,因为目前我能想到的任何C++malloc的使用(包括放置新(目前都有未定义的行为。

相关内容

最新更新