brew平台内存释放的问题

banye11dian 2010-03-12 07:30:34
今天遇到了一个很让我匪夷所思的问题,问题大概是这样的
char *p=(char *)MALLC(20);
然后对指针指向的内容进行了赋值,到这里都没有问题。
然后我将指针p赋值给了指针m,m同样是一个指向char类型的指针
m=p;
然后进行内存的释放,我使用的指针m对那块内存进行释放。
代码如:
AEEHeap_free(m);
在进行释放的时候,系统就崩溃了。

然后我使用指针p对那块内存进行释放,这样就没有问题了。

问题虽然解决了,但是问题的原因始终想不清楚。


请问各位高手,我这样指针之间之间赋值应该没什么问题吧。为什么会系统崩溃呢?难道是是释放的时候内存越界了?


在ARM编译器中,内存是如何释放的?编译器如何知道这块内存的大小?编译器是否会将我们手动分配的内存的指针所指向的内存的大小保存起来,在内存释放的时候去查询这个大小,然后再进行内存的释放?



还请各位高手不吝赐教
...全文
1782 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingqing2300 2010-04-08
  • 打赏
  • 举报
回复
free();
声声醉 2010-04-05
  • 打赏
  • 举报
回复
建议使用BREW标准函数 MALLOC, FREEIF.
malu_1982 2010-04-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ultrapro 的回复:]
分配内存的函数和释放内存函数要配套。
在释放的时候看看,两个指针的值是否相同。
[/Quote]

本质。
路飞-总裁 2010-03-17
  • 打赏
  • 举报
回复
要配对的,用Free
yanshengyu 2010-03-16
  • 打赏
  • 举报
回复
或者
if(NULL != m)
{
FREE(m);
}
yanshengyu 2010-03-16
  • 打赏
  • 举报
回复
释放内存,首先要判断,指针是否为空,建议使用 FREEIF.
visual4825 2010-03-15
  • 打赏
  • 举报
回复
肯定是要配对使用的。但至于为什么会出现问题?考虑是不是可以反汇编一下,看看AEEHeap_free的实现
armar -x XXX.lib
fromelf -c XXX.o -o disasm_XXX.txt
  • 打赏
  • 举报
回复
要用FREE,或者FREEIF
儿大不由爷 2010-03-12
  • 打赏
  • 举报
回复
分配内存的函数和释放内存函数要配套。
在释放的时候看看,两个指针的值是否相同。
悠然红茶 2010-03-12
  • 打赏
  • 举报
回复
可以先尝试把AEEHeap_free换成FREE,应该说FREE(p)和FREE(m)都是可以的。至于为什么崩溃,可能还是和AEEHeap_free的调用有关,当然也有可能是其他原因。
至于你说的编译器是否会将内存的大小记下,这个是不会的。记录内存块大小是内存管理模块做的事情,你可以理解为AEE Heap模块会做这样的事情。
sxcnfly 2010-03-12
  • 打赏
  • 举报
回复
你是写动态应用还是静态应用呢?AEEHeap_free这个函数是静态应用时才可以用的,你必须使用FREE
MicroSky2813 2010-03-12
  • 打赏
  • 举报
回复


#include<cstdio>
#include<iostream>

using namespace std;

int main(){
char *p=(char *)malloc(20);
char *m=p;
free(m);




return 0;
}


mingw + win7 下正常,不清楚是不是brew开发编译器的问题?

2,851

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧