嵌入式技术论坛
直播中

李秀兰

7年用户 1437经验值
私信 关注
[问答]

为什么rt_malloc申请的内存地址会与正在运行的任务B重叠

我在STM32F103中使用了RTTHREAD,同时运行多个任务, 然后在任务A中malloc一块内存用于存储字符串数据,使用完成后立刻释放,结果发现释放时有时有发生hard fault问题,定位在r_free函数处。

再通过查看发生错误时的log显示:该数据的内存地址与正在运行任务B地址重叠的,导致释放时就发生了hard fault错误。

问题在于为什么rt_malloc申请的内存地址会与正在运行的任务B重叠?

LOG如下:allocate memory at 0x20003eb0 第一次申请了512大小的内存是任务B本身的,第二次就是任务A内的函数申请的。

[02/14 17:17:55.331]allocate memory at 0x20003e2c, size: 132
[02/14 17:17:55.331]malloc size 500
[02/14 17:17:55.331]allocate memory at 0x20003eb0, size: 512
[02/14 17:17:55.331]D/app      short thread run...
[02/14 17:17:55.956]malloc size 32
[02/14 17:17:55.956]allocate memory at 0x20003eb0, size: 44
[02/14 17:17:55.987]release memory 0x20003eb0, size: 44
[02/14 17:17:55.987]psr: 0x21000000
[02/14 17:17:55.987]r00: 0x20001278
[02/14 17:17:55.987]r01: 0x28029de7
[02/14 17:17:55.987]r02: 0x00002c2c
[02/14 17:17:55.987]r03: 0x000063f4
[02/14 17:17:55.987]r04: 0x20003ea4
[02/14 17:17:55.987]r05: 0x20000024
[02/14 17:17:55.987]r06: 0x20000024
[02/14 17:17:55.987]r07: 0xdeadbeef
[02/14 17:17:55.987]r08: 0xdeadbeef
[02/14 17:17:55.987]r09: 0xdeadbeef
[02/14 17:17:55.987]r10: 0xdeadbeef
[02/14 17:17:56.034]r11: 0xdeadbeef
[02/14 17:17:56.034]r12: 0xfffffffd
[02/14 17:17:56.034] lr: 0x08035901
[02/14 17:17:56.035] pc: 0x08034de2
[02/14 17:17:56.036]hard fault on thread: lcd thread


回帖(4)

刘丽

2022-4-26 14:47:31
查看map文件,检查下注册的堆空间是否与数据区重叠。
如果没有就是应用有写穿之类的。
举报

李秀兰

2022-4-26 14:47:43
重叠倒没有, 写穿是什么意思?
举报

王飞

2022-4-26 14:48:22
要看余下你的源码,是否第一次申请后,马上使用后就释放了,所以第二次申请后等到的内存地址与第一次申请的地址相同了。
举报

张玉兰

2022-4-26 14:48:55
malloc分配的内存的地方,还有就是有没有存在非法操作
举报

更多回帖

发帖
×
20
完善资料,
赚取积分