delete core dump的思考

    写bug的时候遇到了一个core dump的问题。百思不得其解。现场是这样的,对一个指针进行delete的时候,delete crash。产生core文件,记录下来现场,是delete进行检查时,abort生效。导致失败的。

    经过一顿猛如虎的操作过后,发现malloc的时候会在这个指针前面创建一个我们不可见的head chunk。所以我就怀疑如下几点:

    1. 有人把这个指针做了减一操作,然后对头进行了修改。导致delete check的时候失效。

    2. 有另外一个队内存的操作写越界了,刚好把这个头部里的内容写混乱了,导致delete check失效。

    总结起来就是一点,头部失效!

    排除问题的时候,我们组是我们公司最牛逼的一个组。应该不会有人对指针做减法然后赋值,这么彪的操作。

    我就怀疑是不是自己写哪个数组的时候写越界了,各种边界检查。在代码的海洋里遨游。最后也被自己否决了。因为如果写越界刚好写坏了头部的话,那也不能每次都刚好写坏了那一个头吧。所以第二种应该也不可能。

    最后我怀疑了,这个指针根本就没有头部。然后delete的时候check head的时候自然无效。所以失败。

    大概情况是这样的。

    uint8_t *p = (uint8_t *)data;

    delete[] p;

    p = null;

    就是这个delete crash了。!

    总结:

        delete crash情况:

        1. 有头部:

                1.1:一直crash在一个地方,对指针做了减法然后赋值。

                1.2:crash在不一样的地方,有地方越界了,可以用asan,valgrind进行越界检查。

        2. 没头部:

                 2:没头部,你delete什么?

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值