rt_realloc分配失败问题

发布于 2020-07-17 10:58:04

我用串口按照协议接收一帧数据,因为不能预知一帧数据包长度,所以我先用rt_malloc分配了6byte内存(假设地址为p),来接收帧头和帧长len,接收len之后,根据len的长度用rt_realloc重新分配长度为len的内存,假设这时候分配失败,那么原来的内存地址p是不是就变了,那我这时候应该把原来的6byte释放掉,但是p变了,找不到p了,会不会造成内存泄漏?

查看更多

关注者
0
被浏览
137
2 个回答
JQRR_7669
JQRR_7669 认证专家 2020-07-17

看了下rt_realloc的代码,你说的情况下会有内存泄露可能。你接收长度信息的6个字节可以使用数组代替,这样就不会有风险了。

nongxiaoming
nongxiaoming 2020-07-20

对realloc函数的原型解释是这样的
Otherwise, if size is zero, the memory previously allocated at ptr is deallocated as if a call to free was made, and a null pointer is returned.
If the function fails to allocate the requested block of memory, a null pointer is returned, and the memory block pointed to by argument ptr is not deallocated (it is still valid, and with its contents unchanged).

所以realloc的时候不要用之前的指针直接接返回值,不然是有漏内存的风险的。可以用一个新的指针接返回值,发现返回NULL的时候处理原来的指针。为了编程规范,建议调用参数有指针和返回值是指针的函数都不要用同一个指针做参数输入同时又接返回值,避免坑到自己。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友