内存释放问题

Valonia ·
更新时间:2024-09-21
· 617 次阅读

内存释放问题

今天做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,然后出现上述问题

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


作者:qq_41163331



内存释放

需要 登录 后方可回复, 如果你还没有账号请 注册新账号