在C ++ 17中,malloc是否返回“无效的指针值”?

Bri*_*ian 16 c++ pointers object-lifetime language-lawyer c++17

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

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

  • 指向对象或函数的指针(据说该指针指向对象或函数),或
  • 一个超出对象末尾的指针(8.7),或者
  • 该类型的空指针值(7.11),或者
  • 无效的指针值。

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

Mar*_*low 7

那讲得通。这是一个“无效的指针值”,因为它没有指向对象。

请参阅本节后面的内容:

当指针值表示的存储到达其存储持续时间的结尾时,该指针值将变为无效

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


Lig*_*ica 6

那是正确的。

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

如果将来采用p0593rX,基本上可以通过为您放置一个对象来更改此设置。这实际上非常重要,因为目前malloc我能想到的在C ++中的任何使用(包括新放置)都具有不确定的行为。

  • 其实...。_is_说新的刊登位置有效吗?新放置是否需要有效的指针输入?(通常,它是指向某些“ char []”对象的有效指针)HMM (2认同)