完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在AT组件的EC20模块中的at_socket_ec20.c文件的第818行开始的urc_recv_func函数中,第847行是 recv_buf = (char *) rt_calloc(1, bfsz) 每次进来都会申请内存,我没有找到在哪里释放recv_buf的,我跟了一下,recv_buf每次申请的地址是不一样的,同步跟着rt_free函数,也一直没有看到对以前申请到的内存地址的释放动作,我在SHELL里用free看内存的使用情况,确实是随着数据的进来是在一直增加的。 我还做了一下实验,recv_buf刚申请的时候,我马上rt_free,是没问题的,但是到函数尾部,接收到的数据处理完了,再加个rt_free,就显示ASSERT错误,说该内存未被使用,mem->used=0。既然大家都在用,那这部分肯定是没问题的, 我就想请教一下,我在SHELL里看到的内存泄漏的情况到底是不是因为这里? recv_buf到底是在哪里被free的?为什么我手动free是不行的?多谢了。。。 |
|
相关推荐
2个回答
|
|
at_recvpkt_node_delete 这个函数删除了申请的空间。 至于 shell 里面发现的内存泄露问题,可以使用 memtrace 功能查找,这个功能可以在配置开启。 memtrace 可以显示出申请内存的线程是什么,便于分析。 |
|
|
|
这个会把线程名称只显示 4 个字节,这个名称,是线程的名称。
你可以把 memtrace 里的信息先粗略过一遍;找到内存泄漏的一些部分信息;找到几个可能性比较高的,把线程名称起得容易分辨一些。可以先看看内存泄露的是哪些可能的线程。 测试次数多一些,一两次肯定不够 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
583 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2207 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1227 浏览 0 评论
1776 浏览 0 评论
1462 浏览 0 评论
74797 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 17:07 , Processed in 0.826778 second(s), Total 41, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号