【问题标题】:what happens if malloc (STL allocator, etc)requested to allocate 0 bytes [duplicate]如果malloc(STL分配器等)请求分配0字节会发生什么[重复]
【发布时间】:2011-07-16 19:00:18
【问题描述】:

可能重复:
what does malloc(0) return ?

它是否返回零指针?行为是否标准化?

STL 分配器怎么样?

我用谷歌搜索了它,但找不到我正在寻找的答案。

编辑:链接的问题没有解释 STL 分配器。

我还有一个相关的问题。如果尝试释放零指针会发生什么?

allocator.deallocate(0, 1);

【问题讨论】:

  • 在 linux 盒子上输入 man malloc 提供有用的信息(并确认 Jim 的回答)

标签: c++ c


【解决方案1】:

malloc(0) 可能或者返回 0 或者它可能返回唯一地址(不得访问)——C89 和 C99 标准允许任何一种行为,但不强制任何一种行为。 (一个标准的糟糕设计,我在 X3J11 上时反对,但事实就是这样。)

顺便说一句,这是一个重复的问题:what does malloc(0) return?

【讨论】:

  • 考虑到问题被标记为 C 和 C++,因此值得明确指出您正在谈论的“标准”。此外,由于对 malloc 的任何调用都可能返回 0,因此似乎根本没有为 malloc(0) 做出特别规定。
  • @Pascal 但是在您看来,C 标准确实为 malloc(0) 做出了特殊规定。值得注意的是,malloc(0) 返回 0 并不意味着没有更多的内存。
【解决方案2】:

在 Linux 2.6.34.7-66.fc13.x86_64 上测试,它返回一个唯一的地址。

不过,我不会尝试取消引用它。 :)

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    • 2016-01-07
    • 2012-09-02
    • 1970-01-01
    • 2017-05-07
    • 2021-03-17
    相关资源
    最近更新 更多