jiaowoxiaolu 发表于 2013-8-9 18:30:34

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

申请内存,然后多次改变内存大小,最后free就死机了{:sweat:}                         u8* Dbuf=rt_malloc(1024*50);
                rt_realloc(Dbuf,6000);
                rt_realloc(Dbuf,2000);
                rt_realloc(Dbuf,1000);
                rt_realloc(Dbuf,4000);
                rt_realloc(Dbuf,8000);
                rt_thread_delay(100);       
                rt_free(Dbuf);   
当执行到rt_free的时候就死在    RT_ASSERT(mem->magic == HEAP_MAGIC);这里了,

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

aozima 发表于 2013-8-9 20:27:17

realloc
语法:#include <stdlib.h>
void *realloc( void *ptr, size_t size );功能: 函数将ptr 对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。

amwox 发表于 2013-8-10 09:29:19

出错的问题是
1.rt_calloc的用法该是 Dbuf= rt_realloc(Dbuf,6000);
2.你第一次分配的空间如果一直大于后面的,你的问题将会被隐藏,直到rt_realloc(Dbuf,8000);才暴露出来{:titter:}

jiaowoxiaolu 发表于 2013-8-10 09:41:15

amwox 发表于 2013-8-10 09:29 static/image/common/back.gif
出错的问题是
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大小的
页: [1]
查看完整版本: 这个算是rtt的BUG么??多次rt_realloc后 free会RT_ASSERT