首页
社区
课程
招聘
[注意]C/C++程序员不得不关注的问题
发表于: 2007-9-16 10:16 4411

[注意]C/C++程序员不得不关注的问题

2007-9-16 10:16
4411
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

char *ghh()
{
char *yy=malloc(1000);//这里的分配没有FREE

return yy;
}

char *res()
{
char *pp=malloc(1000);//这里的分配没有FREE

return pp;
}

int main()
{
char *vbtt,*fwp;
vbtt=ghh();
vbtt[0]='0';vbtt[1]='1';vbtt[2]='2';vbtt[3]='3';vbtt[4]='4';vbtt[5]='5';vbtt[6]='6';vbtt[7]='7';
printf("__%s_____________\n",vbtt);
sleep(10);
free(vbtt);//--------------GCC无法释放,BC5.5可以
printf("__%s_____________\n",vbtt);
sleep(10);
fwp=res();
fwp[0]='7';fwp[1]='6';fwp[2]='5';fwp[3]='5';fwp[4]='4';fwp[5]='3';fwp[6]='7';
printf("__%s_____________\n",fwp);
sleep(10);
free(fwp);
printf("__%s_____________\n",fwp);
}
执行结果
============ GCC
__01234567_____________
__01234567_____________
__76554377_____________
__76554377_____________
================BC5.5
__01234567_____________
__x    _____________
__76554377_____________
__x    _____________
在此通过观察内存情况发现free没有释放malloc函数的指针,这里也有点晕了请高人指点。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
用MSVC吧.
2007-9-16 11:59
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
楼主去看看书吧 《windows核心编程》之类的,不要搞标题党
malloc实质是HeapAlloc, 从堆中分配内存
假设你这个例子中当前堆的大小是连续的1M
在malloc(1000)后, 系统在1M的堆中找了连续的1000大小的空间返回给了你
当你free掉后,系统做的事情只是把这1000重新标记为空闲的可再次分配的,没有必要把这1000从连续的1M中删除这块区域,也没有必要清0
这样你再次再malloc时,系统仍然可能把那块地方返回给你
2007-9-16 12:18
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PFC
4
谢谢,以后争取不做------标题党
2007-9-16 14:32
0
游客
登录 | 注册 方可回帖
返回
//