std :: malloc在失败时返回null或nullptr吗?



根据http://en.cppreference.com/w/cpp/memory/c/malloc std :: malloc返回失败

上的null ptr

是无效的指针还是nullptr?

如果是nullptr,则意味着std :: malloc和c malloc之间存在差异。然后,在这种情况下,还有其他问题还有其他区别吗?

编辑:这不是评论中建议的重复。这解释了nullptr是什么,显然说它们与众不同。问题不是询问它们之间的区别。

它返回NULL。来自C 标准的N4296草稿:

20.7.13 C库[C.Malloc]

  1. 表45描述了标题<cstdlib>

    表45 - 标题<cstdlib>概要:

    +------------+---------------+
    | Type       | Name(s)       |
    +------------+---------------+
    | Functions:   calloc malloc |
    |              free realloc  |
    +----------------------------+
    
  2. 内容与标准C库标题11相同,并具有以下更改:
  3. 功能calloc()malloc()realloc()不要通过调用::operator new()(18.6)来分配存储空间。
  4. 函数free()不会通过调用::operator delete()来处理存储。
  5. 直接使用malloc()calloc()realloc()分配的存储是隐式声明的(请参见3.7.4.3),分配时,在Dealllocation上不得声明,不需要在Dealllocation上声明,并且不需要停止以undeclare_reachable()呼叫的结果而宣布为可达的结果。

您可以看到,C 标准委托委员会定义malloc的C标准,并且对其返回值或类型没有进一步的限制。由于C具有NULL但没有nullptr,因此我们可以肯定地说malloc返回NULL

,但所有这些都没有毫无意义,因为NULL == nullptr始终是正确的,因为它们都是"无效指针常数"(在4.10指针转换中明确定义的术语[cons.ptr])。两者是等效的。

都不。

返回类型为std::mallocvoid*。分配失败的返回值为类型void* 的空指针值。

NULL是预处理宏。宏本身没有类型或价值。该宏可以定义为nullptr0。因此,我们不能真正说std::malloc返回NULL。我们可以说,它返回的内容等于从NULL回答的值转换的值。

尽管nullptr是"无效指针字面",但它本身并不是指针。它的类型不是传统的指针类型。奇怪的是,它的类型是decltype(nullptr),这不是std::malloc的返回类型。因此std::malloc不返回nullptr

std::malloc首先返回指针。nullptr 不是指针(实际上是它的全部点)。因此,std::malloc无法返回nullptr

失败时,std::malloc将返回一个指示值,该指针值定义为"零指针常数"。nullptr是一种非分量类型,可隐式转换为" null指针常数",并且与任何指针值相等(如果指针值为" null指针常数")。

>

因此,如果您针对nullptr测试返回值,则仅当std::malloc失败时,它才能测试。

整数文字0中的宏NULL结果(对于C )(注意:它也可以导致nullptr,但几乎没有实现的方法)。通过C 的规则,整数字面0是隐式转换为空指针常数的,并且与任何指针值相当(如果指针值为" null Pointer Constant",则导致等效)。

因此,如果您针对NULL测试返回值,则仅当std::malloc失败时,它才能测试。

相关内容

  • 没有找到相关文章

最新更新