【问题标题】:Realloc implementation重新分配实现
【发布时间】:2009-09-02 04:43:42
【问题描述】:

我正在编写一个简单的基于链表的内存管理器,格式如下:

...Header|Block|Header|Block... 带有已使用和空闲列表。

如果要求 realloc() 函数减小块的大小,是否可以用新创建的块的标头覆盖一些尾随字节?我读过的文档表明这是“未定义的行为”,但应用程序是否依赖于仍然存在的数据?

【问题讨论】:

    标签: c memory realloc


    【解决方案1】:

    关于未定义行为的评论很可能是这样的:“当 realloc 返回时访问块结束后的任何字节都是未定义的”。

    这样的规范正是为了允许您在 realloc 的实现中将标头放入尾随字节中。这是未定义的行为意味着如果应用程序尝试从字节中读取(从概念上讲已经消失),它将读取您的标头,这对应用程序来说将显示为垃圾;如果它甚至写入,它会杀死你的标题 - 所以应用程序不应该这样做。

    【讨论】:

      【解决方案2】:

      当然。它已被重新分配,所以现在它已被应用程序释放,它属于您的经理。用新的指针开始破坏它是正常的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-08
        • 2020-02-18
        • 1970-01-01
        • 2023-03-21
        • 2015-05-12
        • 1970-01-01
        • 2013-03-24
        相关资源
        最近更新 更多