c语言如何实现错误提示,在C中,如何在free()函数实现中检测边界写错误?

通常的做法是分配比所需更多的内存,并在末尾放置一个标记(在过度分配的内存中).释放时,您将检查标记是否未被覆盖.

对于我自己,我已经创建了一个malloc()的自定义版本,它在块的开头和结尾放置一个标记:

+--------+

| size |

|BEEFF00D|

p-> | ... |

|DEADC0DA|

+--------+

并将返回p而不是真正分配的块.

当我释放块时,我在指针之前检查它的值是否为0xBEEFF00D,如果没有,则要释放的指针无效.然后,如果它有效,我检查块的末尾(我已经存储了大小)并查看标记0xDEADC0DA是否存在,如果没有出现边界错误.

如果一切正常,在释放(实际)块之前,我用标记0xDEFACED替换初始标记0xBEEFF00D,以便捕获double free()错误.

我已经设置了所有内容,以便我可以包含一个标头并使用符号UTL_MEMCHECK进行编译,以便每个free(),malloc(),calloc(),realloc()和strdup()都将被我的检查版本替换.当我确定一切正常时,我会在没有定义UTL_MEMCHECK的情况下重新编译.这可能对你来说太过分了,但如果你感兴趣,你可以在这里找到我的代码:https://github.com/rdentato/clibutl/blob/master/src/utl.h

只需跳过第875行并忽略其余部分.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值