1

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

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

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

4

2 回答 2

3

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

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

于 2009-09-02T04:52:04.020 回答
1

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

于 2009-09-02T04:50:55.923 回答