免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: liuhengloveyou
打印 上一主题 下一主题

[C] 大侠来看.malloc 内存分配问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-12-04 14:59 |只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
  char *p1=(char *)malloc(10);
  memset(p1,'a',10);
  char *p2=p1;
  char *p3=p1;
  int i;
  p2+=2;
  *p2=0;
  free(p1);
  printf("%x p2: %s\n",p2,p2);
  printf("%x p1: %s\n",p1,p1);
  for(i=0;i<10;i++,p3++)
  {
    printf("%x %c\n",p3,*p3);
  }
  return 0;
}

输出是:
$ ./test.exe
3e24ca p2:
3e24c8 p1:
3e24c8
3e24c9
3e24ca
3e24cb
3e24cc a
3e24cd a
3e24ce a
3e24cf a
3e24d0 a
3e24d1 a
msingle 该用户已被删除
12 [报告]
发表于 2009-12-04 14:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2009-12-04 15:19 |只看该作者
lz好好了解一下操作系统吧
先去真正弄清楚什么叫“内存泄漏”

论坛徽章:
0
14 [报告]
发表于 2009-12-04 19:23 |只看该作者
LZ可以考虑去看看我签名里的第二个连接

[ 本帖最后由 lenky0401 于 2009-12-4 19:25 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-12-04 20:00 |只看该作者
原帖由 jiangn 于 2009-12-4 14:59 发表
#include
#include
#include
int main()
{
  char *p1=(char *)malloc(10);
  memset(p1,'a',10);
  char *p2=p1;
  char *p3=p1;
  int i;
  p2+=2;
  *p2=0;
  free(p1);
  printf("%x p2: % ...


结果很有意思。
free的时候,只是把头4个字节重置了,其它的则没变。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
16 [报告]
发表于 2009-12-04 22:45 |只看该作者
原帖由 liuhengloveyou 于 2009-12-4 14:41 发表


是啊, 我开始是在LINUX下(GCC)测试的, 效果就是那样. free 把'\0'前的置空了, 后面的还有.
刚又在VC6里重做了一遍, 效果完全不一样. free后所有malloc来的内存都成不确定的内容了.

不知道啥意思了, 完全 ...


这是一种Debug机制(为了方便你Debug),楼主和Release版本试试,原来的东西就在了~~

论坛徽章:
0
17 [报告]
发表于 2009-12-04 23:19 |只看该作者
其实没必要在这些问题上纠结,手册写得很清楚了,你照用就行了

论坛徽章:
0
18 [报告]
发表于 2009-12-05 10:32 |只看该作者
free的作用不是单单只是把之前分配的内存标记为可用么?
从现实意义上说free也没理由去清空内存啊!更不可能存在只释放部分内存的说法!

论坛徽章:
0
19 [报告]
发表于 2009-12-07 10:01 |只看该作者
那free过后的内存还在用的话多危险啊, 已经可用状态了.

这意思就是CODER写程序习惯要好了, 是吧?

论坛徽章:
0
20 [报告]
发表于 2009-12-09 20:18 |只看该作者
原帖由 liuhengloveyou 于 2009-12-7 10:01 发表
那free过后的内存还在用的话多危险啊, 已经可用状态了.

这意思就是CODER写程序习惯要好了, 是吧?

free(p);
p=NULL;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP