LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: shell

malloc怎么都不理解 ?

[复制链接]
 楼主| 发表于 2004-8-21 13:57:42 | 显示全部楼层
真的太谢谢你们了,我更有信心学c
 楼主| 发表于 2004-8-21 15:06:30 | 显示全部楼层
  1. [color=crimson][SIZE=4]#include<stdio.h>
  2.                                                                                                                
  3. struct stu
  4. {
  5.   char *name;
  6.   char sex;
  7.   int age;
  8.   float score;
  9. } *ps;
  10.                                                                                                                
  11. main()
  12. {
  13.   ps=(struct stu *)malloc(sizeof(struct stu));
  14.                                                                                                                
  15.   ps->name="shellon";
  16.   ps->sex='M';
  17.   ps->age=21;
  18.   ps->score=68;
  19.                                                                                                                
  20.   printf("name is %s\nsex is %c\nthe age is %d\nThe score is %f\n",ps->name,ps->sex,ps->age,ps->score);
  21.                                                                                                                
  22.   free(ps);
  23.                                                                                                                
  24.   putchar('\n');
  25.                                                                                                                
  26.   printf("name is %s\nsex is %c\nthe age is %d\nThe score is %f\n",ps->name,ps->sex,ps->age,ps->score);
  27. }[/size][/color]
复制代码

这里释放了内存后,再printf的话,name的输出就没有,其他还有,这什么原因呢 ?? 为什么sex,age,score还能正常输出呢 ?


name is shellon
sex is M
the age is 21
The score is 68.000000

name is (null)
sex is M
the age is 21
The score is 68.000000
发表于 2004-8-21 19:32:22 | 显示全部楼层
系统在释放内存时,只是把那一块内存作上一个标记,表示它可以被其它程序使用,并不会把这块内存的每个字节都复位成零。就象使用FAT文件系统的硬盘上的文件被delete掉时,只是在FAT表中作一个标记,说明这部分磁盘空间可以被自由分配给其它文件,而不是把这部分磁盘空间全部格式化掉,那样做事实上也没有必要。指针被释放后,指针所指向的内存区域不一定立即就会被其它程序占用,自然就出现了你所说的现象,但在指针被释放后还这样使用指针是极其危险的,将会产生难以预料的后果。建议你养成习惯,在free后将指针置为null。
发表于 2004-8-22 10:06:20 | 显示全部楼层
嗯,还是应该在程序里做判断,如果分配不了要怎么办?做一下错误处理.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表