c - 重新分配实现

标签 c memory realloc

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

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

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

最佳答案

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

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

关于c - 重新分配实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1365866/

相关文章:

c - 多字符常量,我做错了什么? C

计算表达式的c程序

c - 错误类型 : fuzzer. c:26:25:警告:赋值从指针生成整数而不进行强制转换 [-Wint-conversion]

c - 如何区分两位数(65)和字符 ('a' )?

iphone - 如何使用iPhone的崩溃报告查找问题?

c - 在 C 中使用 "realloc"的问题

第一次 scanf 后 C 程序崩溃

r - 为什么连接终止

linux - 页缓存与 L1 缓存?

c - 在 realloc 之后组织指针数组