| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 689 人关注过本帖
标题:关于 free()函数
只看楼主 加入收藏
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
结帖率:83.33%
收藏
 问题点数:0 回复次数:10 
关于 free()函数
请教:
free函数会把内存里的数据抹掉吗,还是只是把那个地址给释放掉?
2014-09-18 00:21
魑魅魍魉!
Rank: 3Rank: 3
来 自:亲爱MM肚子里!
等 级:论坛游侠
威 望:1
帖 子:61
专家分:149
注 册:2014-5-3
收藏
得分:0 
网上例子!

free()函数的作用是释放内存,而释放内存的实际作用是:清除这块内存里

存的内容。指向内存的指针还是存在的。通过下面的例子大家在理解一下。

 #include <stdio.h>

 

#include <string.h>

 

#include <stdlib.h>

 

  

int main(void)

 

{

  

char *str;

  

str = (char *)malloc(10);//

通过

malloc

()函数分配了

10

个字节的内存,并让

str

指向这块内



  

strcpy(str, 'abc'); //

向这块内存里放内容

 

  

printf('%pn', str); //

打印出

str  

puts(str); //

输出

str

指向的这块内存的内容

 

 

  

free(str); //



free( )

释放掉这块内存

 

printf('%pn', str); //

再一次打印出

str

puts(str);//



free()

释放后内存里的内容

  

strcpy(str, 'def'); //



str

所指的内存里再次写内容

 

puts(str); //

打印出

str

所指的内存里的内容

 

}

 

  

通过调用

free()

之前和用

free

()之后指向内存的指针、内存里面的内容对比着理解。
2014-09-18 00:49
魑魅魍魉!
Rank: 3Rank: 3
来 自:亲爱MM肚子里!
等 级:论坛游侠
威 望:1
帖 子:61
专家分:149
注 册:2014-5-3
收藏
得分:0 
网上例子!

free()函数的作用是释放内存,而释放内存的实际作用是:清除这块内存里

存的内容。指向内存的指针还是存在的。通过下面的例子大家在理解一下。

 #include <stdio.h>

 

#include <string.h>

 

#include <stdlib.h>

 

  

int main(void)

 

{

  

char *str;

  

str = (char *)malloc(10);//

通过

malloc

()函数分配了

10

个字节的内存,并让

str

指向这块内



  

strcpy(str, 'abc'); //

向这块内存里放内容

 

  

printf('%pn', str); //

打印出

str  

puts(str); //

输出

str

指向的这块内存的内容

 

 

  

free(str); //



free( )

释放掉这块内存

 

printf('%pn', str); //

再一次打印出

str

puts(str);//



free()

释放后内存里的内容

  

strcpy(str, 'def'); //



str

所指的内存里再次写内容

 

puts(str); //

打印出

str

所指的内存里的内容

 

}

 

  

通过调用

free()

之前和用

free

()之后指向内存的指针、内存里面的内容对比着理解。
2014-09-18 00:49
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
收藏
得分:0 
好的谢谢
2014-09-18 01:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
free函数会把内存里的数据抹掉吗,还是只是把那个地址给释放掉?
--------------
free(p) 就是 p 指向的这块内存你不可以再用,就这么简单。
千万不要认为,free会将 p值 给杀掉,p值 是杀不掉的;
千万不要认为,free会将 p指向的内容 给改写掉,虽然有可能
千万不要认为,free会将 p指向的内容 用锤子给砸掉,虽然也有可能
千万不要认为,free会将 p指向的内容 释放给操作系统,虽然有可能
……
最后,访问野指针指向的内容是“未定义行为”,别用代码说明未定义行为
2014-09-18 09:06
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
收藏
得分:0 
回复 3 楼 魑魅魍魉!
解释这么多,一句strcpy(str, 'abc');就露怯了

总有那身价贱的人给作业贴回复完整的代码
2014-09-18 10:15
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
free()只是告诉操作系统“指针所指向的内存可以回收”,但不会去冲刷那块内存,而操作系统什么时候回收、另外利用那块内存,是不知道的——程序员不要去假定操作系统什么时候、做什么动作。

用指针,其实消耗了两处资源,一个是指针(变量)本身所占用的空间(通常在栈上),一个是指针所指向的数据空间。释放内存只是释放后者,但前者是没有释放的,所以编程规范建议在free()之后立即把前者指针的值赋NULL,让程序员无法再循指针寻访原先的数据(即前者),就是这个意思。

授人以渔,不授人以鱼。
2014-09-18 12:09
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
收藏
得分:0 
明白了 多谢各位
2014-09-20 00:39
随风而行lulu
Rank: 2
等 级:论坛游民
帖 子:59
专家分:60
注 册:2014-9-6
收藏
得分:0 
%pn 是什么意思?我看的入门书里没提到过这个 百度不出来
2014-09-20 01:02
nixk
Rank: 2
等 级:论坛游民
帖 子:32
专家分:12
注 册:2014-9-10
收藏
得分:0 
打错了吧  好像是 %p\n这个
2014-09-21 14:34
快速回复:关于 free()函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015192 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved