免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1444 | 回复: 9
打印 上一主题 下一主题

Free 后的问题,数据还是可以访问。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-06-20 22:58 |只看该作者 |倒序浏览
#include <stdio.h>;
#include <sys/types.h>;

typedef struct linklist* slink;
struct linklist
{
        int data;
        slink next;
};

slink head; /* head  */
slink create_list();

void main()
{
        slink top;
        int icount;
        printf(" create linklist \n");
       
        printf("head address %x\n",head);       
       
/*        printf("head data =[%d]\n",head->;data); */
        create_list( );
        head->;data = 999;
        printf("head address %x\n",head);       
        printf("head data =[%d]\n",head->;data);
        printf("head next = %x\n",head->;next);
        free( head );
        /* head = NULL; */
        printf("free \n");
        printf("head address %x\n",head);
        printf("head data =[%d]\n",head->;data);
        printf("head next = %x\n",head->;next);
}

slink create_list(  )
{
       
        head = (slink*)malloc( sizeof(slink) );
        head->;next = NULL;
        return head;

}

论坛徽章:
0
2 [报告]
发表于 2005-06-20 23:01 |只看该作者

Free 后的问题,数据还是可以访问。

函数输出:
create linklist
head address 0
head address 804f030
head data =[999]
head next = 0
free
head address 804f030
head data =[999]
head next = 0

论坛徽章:
0
3 [报告]
发表于 2005-06-20 23:37 |只看该作者

Free 后的问题,数据还是可以访问。

  1. head = (slink*)malloc( sizeof(slink) );
复制代码

这句不对吧?应当是
  1. head = (slink)malloc( sizeof(struct linklist) );
复制代码

论坛徽章:
0
4 [报告]
发表于 2005-06-21 08:17 |只看该作者

Free 后的问题,数据还是可以访问。

谢谢 haplo:
这里是不正确,不过这里分配内存,只是做强制类型转换,
slink* 和slink** 都是指针,在我的程序里是相同的。不受影响。

论坛徽章:
0
5 [报告]
发表于 2005-06-21 09:04 |只看该作者

Free 后的问题,数据还是可以访问。

印象当中是这样的.

在free之后,只要该内存区没有被另外分配使用,内存里的内容不会改变,可以访问.

论坛徽章:
0
6 [报告]
发表于 2005-06-21 09:07 |只看该作者

Free 后的问题,数据还是可以访问。

free之后内存即使可以访问,也是危险的。这部分内存很有可能随时被再次分配出去。
最好在free之后让指针指向NULL

论坛徽章:
0
7 [报告]
发表于 2005-06-21 09:33 |只看该作者

Free 后的问题,数据还是可以访问。

知道没虾米别的语言里灭有指针了吧。

论坛徽章:
0
8 [报告]
发表于 2005-06-21 14:24 |只看该作者

Free 后的问题,数据还是可以访问。

原帖由 "dingjf7516" 发表:
印象当中是这样的.

在free之后,只要该内存区没有被另外分配使用,内存里的内容不会改变,可以访问.


如果 free 失败,那么指针指向 NULL,不就出现了数据丢失吗 ?

论坛徽章:
0
9 [报告]
发表于 2005-06-21 15:00 |只看该作者

Free 后的问题,数据还是可以访问。

free就像unlink删除文件,它只是告诉系统,这里指向的内存自由了,可以被其它人使用了,但并不清空它.因为清空的工作是不必要的,反而影响效能.

论坛徽章:
0
10 [报告]
发表于 2005-06-21 17:57 |只看该作者

Free 后的问题,数据还是可以访问。

弥敦路九号 :
从理论上,如果free后,立即malloc就可能分配到刚才的地址。
但是,如果不执行free,内存就接着向上分配。
和实现的平台的内存管理机制有关。看来需要学学这方面的知识。
谢谢大家!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP