内存释放问题

内存释放问题

今天做Android项目的时候出现一个崩溃的问题,该崩溃问题的崩溃日志如下:

signal 11 (SIGSEGV), code 2 (SEGV_ACCERR), fault addr 0x3d206578
    r0 e5848200  r1 e5859274  r2 0000002c  r3 3d20657a
    r4 00c80000  r5 009a0000  r6 e5dd4414  r7 d743c468
    r8 f7286b88  r9 d7450484  sl d7341000  fp f3d62b5d
    ip f3c86fdc  sp d743c330  lr f3d38c8b  pc 3d206578  cpsr 80010010
    d0  5f6c61746f745f61  d1  3434203d206e656c
    d2  20656b6361705f70  d3  7461645f74756f20
    d4  3736313537383733  d5  3a74726f70642038
    d6  203d2074726f7073  d7  30383a3832323434
    d8  0000000000000000  d9  0000000000000000
    d10 0000000000000000  d11 0000000000000000
    d12 0000000000000000  d13 0000000000000000
    d14 0000000000000000  d15 0000000000000000
    d16 0000708000007080  d17 0000000000007080
    d18 0000000000000000  d19 0000000000000000
    d20 12f4630012f4ed40  d21 12f4b34012f22c00
    d22 0000000000000001  d23 0403040300000000
    d24 0000000000000001  d25 0001000100050005
    d26 8003800380078007  d27 0023002300030003
    d28 0000000000000000  d29 0000000000000000
    d30 0000000000000000  d31 0000000000000000
    scr 80000010
00 pc 0a605578  /dev/ashmem/dalvik-main space 1 (deleted) (offset 0x1000)

看该堆栈信息,大概能猜到是使用了已经释放的内存

  接下来就追踪代码,发现先malloc,然后再使用,不可能是使用的是已经释放的内存啊。实在是想不明白为何提示是使用已经释放的内存啊。苦思冥想,再一点一点的扣代码,发现问题是这样的:
free 释放track内存 =0xe5848200之后(释放了两次), 再申请同等大小的内存分配的是上个释放的内存0xe5848200,然后出现上述问题

  总结:当一块内存被释放两次之后,该内存再被申请后,该内存是释放的状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值