malloc是否在C ++ 17中返回“无效的指针值”? [重复]

问题描述 投票:16回答:2

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

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

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

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

c++ pointers language-lawyer c++17 object-lifetime
2个回答
8
投票

这很有意义。这是一个“无效的指针值”,因为它没有指向对象。

请参阅本节后面的内容:

指针值在其表示的存储到达其存储持续时间结束时变为无效

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


6
投票

没错。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.