我正在编写一个简单的基于链表的内存管理器,形式如下:
...Header|Block|Header|Block...带有已用和空闲列表。
如果要求 realloc() 函数减小块的大小,是否可以用新创建的 block 的 header 覆盖一些尾随字节?我读过的文档表明这是“未定义的行为”,但应用程序是否依赖于仍然存在的数据?
最佳答案
最有可能的是,关于未定义行为的评论是这样的:“当 realloc 返回时,访问 block 结束后的任何字节是未定义的”。
这样的规范正是为了让您在realloc 的实现 中将 header 放入尾随字节中。这是未定义的行为意味着如果应用程序试图从字节中读取(概念上已经消失),它会读取您的 header ,这对应用程序来说将显示为垃圾;如果它甚至写入,它会杀死你的标题 - 所以应用程序不应该这样做。
关于c - 重新分配实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365866/