根据 C++17 [basic.compound]/3:
指针类型的每个值都是以下值之一:
指向对象或函数的指针
- (指针被称为指向对象或函数(,或
- 经过对象末尾的指针 (8.7(,或
- 该类型的空指针值 (7.11(,或
- 无效的指针值。
malloc
函数返回指针值。让我们假设调用成功,因此返回值不为 null。malloc
([c.malloc]( 的规范没有说明它在返回的存储中创建任何对象,因此"无效指针值"似乎是最不荒谬的类别。
这是有道理的。 它是一个"无效指针值",因为它不指向对象。
请参阅该部分的后面部分,其中说:
当指针值表示的存储达到其存储持续时间结束时,指针值将变为无效
这意味着不是指针的"值"使其无效,而是它不指向有效对象。
这是正确的。
内存中该位置没有对象。记忆"属于你"。但是,指针是否有效不是由内存分配决定的,而是由它指向的对象是否存在决定的。此指针不指向任何对象,因此它是无效指针。
p0593rX,如果将来被采用,将改变这一点,基本上是在那里为你放一个对象。这实际上非常重要,因为目前我能想到的任何C++malloc
的使用(包括放置新(目前都有未定义的行为。