brew平台内存释放的问题
今天遇到了一个很让我匪夷所思的问题,问题大概是这样的
char *p=(char *)MALLC(20);
然后对指针指向的内容进行了赋值,到这里都没有问题。
然后我将指针p赋值给了指针m,m同样是一个指向char类型的指针
m=p;
然后进行内存的释放,我使用的指针m对那块内存进行释放。
代码如:
AEEHeap_free(m);
在进行释放的时候,系统就崩溃了。
然后我使用指针p对那块内存进行释放,这样就没有问题了。
问题虽然解决了,但是问题的原因始终想不清楚。
请问各位高手,我这样指针之间之间赋值应该没什么问题吧。为什么会系统崩溃呢?难道是是释放的时候内存越界了?
在ARM编译器中,内存是如何释放的?编译器如何知道这块内存的大小?编译器是否会将我们手动分配的内存的指针所指向的内存的大小保存起来,在内存释放的时候去查询这个大小,然后再进行内存的释放?
还请各位高手不吝赐教
[解决办法]
你是写动态应用还是静态应用呢?AEEHeap_free这个函数是静态应用时才可以用的,你必须使用FREE
[解决办法]
可以先尝试把AEEHeap_free换成FREE,应该说FREE(p)和FREE(m)都是可以的。至于为什么崩溃,可能还是和AEEHeap_free的调用有关,当然也有可能是其他原因。
至于你说的编译器是否会将内存的大小记下,这个是不会的。记录内存块大小是内存管理模块做的事情,你可以理解为AEE Heap模块会做这样的事情。
[解决办法]
分配内存的函数和释放内存函数要配套。
在释放的时候看看,两个指针的值是否相同。