我正在写一个简单的基于链表的内存管理器:
...标题|阻止|标题|阻止...使用已使用和空闲的列表。
如果要求realloc()函数减小块的大小,是否可以用新创建的块的标题覆盖一些尾随字节?我读过的文档表明这是“未定义的行为”,但应用程序是否依赖于仍存在的数据?
答案 0 :(得分:3)
最有可能的是,未定义行为的注释如下:“当realloc返回时,在块结束后访问任何字节是未定义的。”
这样的规范正好允许您在realloc 的实现中将标题放入尾随字节。它是未定义的行为意味着如果一个应用程序试图从字节中读取(在概念上已经消失),它将读取您的标题,这对应用程序来说是垃圾;如果它甚至写,它会杀死你的标题 - 所以应用程序不应该这样做。
答案 1 :(得分:1)
不确定。它已被重新分配,所以现在它已被应用程序发布,它属于您的经理。用新指针开始破坏它是正常的。