在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是不行的?多谢了。。。