搜索
bottom↓
回复: 3

这个算是rtt的BUG么??多次rt_realloc后 free会RT_ASSERT

[复制链接]

出0入22汤圆

发表于 2013-8-9 18:30:34 | 显示全部楼层 |阅读模式
申请内存,然后多次改变内存大小,最后free就死机了
  1.                          u8* Dbuf=rt_malloc(1024*50);
  2.                 rt_realloc(Dbuf,6000);
  3.                 rt_realloc(Dbuf,2000);
  4.                 rt_realloc(Dbuf,1000);
  5.                 rt_realloc(Dbuf,4000);
  6.                 rt_realloc(Dbuf,8000);
  7.                 rt_thread_delay(100);       
  8.                 rt_free(Dbuf);   
复制代码
当执行到rt_free的时候就死在
  1.     RT_ASSERT(mem->magic == HEAP_MAGIC);
复制代码
这里了,

版本是1.2.0 ,lpc1788平台,heap设置到外部sdram,一共有将近10M可以使用,不会内存不足,单次realloc不会死机,多次才会有这个现象

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2013-8-9 20:27:17 | 显示全部楼层
realloc
语法:
  1. #include <stdlib.h>
  2. void *realloc( void *ptr, size_t size );
复制代码
功能: 函数将ptr 对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。

出0入0汤圆

发表于 2013-8-10 09:29:19 | 显示全部楼层
出错的问题是
1.rt_calloc的用法该是 Dbuf= rt_realloc(Dbuf,6000);
2.你第一次分配的空间如果一直大于后面的,你的问题将会被隐藏,直到rt_realloc(Dbuf,8000);才暴露出来

出0入22汤圆

 楼主| 发表于 2013-8-10 09:41:15 | 显示全部楼层
amwox 发表于 2013-8-10 09:29
出错的问题是
1.rt_calloc的用法该是 Dbuf= rt_realloc(Dbuf,6000);
2.你第一次分配的空间如果一直大于后面 ...

Dbuf= rt_realloc(Dbuf,6000);
已经改成这样了,呵呵,是我眼花 没看到rt_realloc前面是void* 只看到了void

但是现在realloc还是经常返回null,可是我的内存 mem init, heap begin address 0xa0168c28, size 32076736
打死都用不完,为何分派不到?realloc 3到4次就会返回null了 每次不超10k大小的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 22:10

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表