社区
C语言
帖子详情
空悬指针问题
rs369007
2009-11-02 09:16:27
当free掉一个指针 但是还是能用 释没释放看来效果一样
那这里free 与没有free到底实质区别在那里 还是free只是一种心理安慰而已
#include<stdio.h>
main()
{
char ch[4]="ing";
char *p;
p=ch;
puts(p);
free(p);
//p已经释放了,还能引用,这里free还有意义吗?
puts(p);
getch();
return 0;
}
...全文
88
5
打赏
收藏
空悬指针问题
当free掉一个指针 但是还是能用 释没释放看来效果一样 那这里free 与没有free到底实质区别在那里 还是free只是一种心理安慰而已 #include main() { char ch[4]="ing"; char *p; p=ch; puts(p); free(p); //p已经释放了,还能引用,这里free还有意义吗? puts(p); getch(); return 0; }
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rs369007
2009-11-02
打赏
举报
回复
可能理解了,像磁盘文件一样,删除了,也只是做个标记,其实还在磁盘上面,当有文件再请求存储在磁盘时上,这个区域是可以被使用的。
butwang
2009-11-02
打赏
举报
回复
free只是对你以前申请的内存做了个删除的标记,你要使用可以,后果自负
jackyjkchen
2009-11-02
打赏
举报
回复
心理安慰……你不要puts,用strcpy试试看,VC绝对报错,TC不报错是因为编译器太矬
aizibion
2009-11-02
打赏
举报
回复
free就是告诉婚姻介绍所,这个女士我不要了,你介绍给别人吧
如果你不要她之后,某天又去要,出不出问题就得看婚姻介绍所有没有把她介绍出去了
lingyin55
2009-11-02
打赏
举报
回复
free(p);
之后最好加上
p=NULL;
不出错是你运气好而已
关于C++ 智能
指针
的一点认识
背景: 默认的c++拷贝与赋值构造函数实现的是值拷贝传递。当类的数据成员为指向堆上的
指针
时,值拷贝会使多个类的
指针
指向同一块内存。当其中一个类释放这块内存时,会照成其他类的这个
指针
空悬
,从而引来风险。 智能
指针
是用来解决这类
问题
的方法。它终的目的是让多份
指针
安全地指向同一块内存。要做到这一点,这块被指向的内存只能在后一个
指针
所在的类被析构时,才被释放。 认识: 网上的资料显示智能
指针
有引用辅助类和使用句柄类这两种实现方法。但从本质上看,都是实现: 1、使得智能
指针
这个类拥有与
指针
相似的使用方法。(通过重载*,->等符号可以实现) 2、需要借助一块堆上的内存来
空悬
指针
与野
指针
当delete一个
指针
后,
指针
值 就变为无效了。虽然
指针
已经无效,但在很多机器上仍然保存着(已经释放了的)动态内存的地址。在delete之后,
指针
就变成了人们所说的
空悬
指针
,即指向一块曾经保存数据对象但现在已经无效的内存的
指针
。 野
指针
即未初始化
指针
,在
指针
即将要离开其作用域之前释放掉它所关联的内存可以避免
空悬
指针
问题
。在
指针
关联的内存被释放掉以后,就没有机会继续使用
指针
...
空悬
指针
、野
指针
、内存泄漏、内存溢出
在C语言中,
指针
的功能十分强大,这使得在C中程序员对于
指针
的使用要十分地谨慎。那么首先我们对于
指针
的使用就是要对
空悬
指针
(dangling pointer)和野
指针
进行避免。 首先我们介绍
空悬
指针
,
空悬
指针
指的是一个
指针
,当它指向的对象已经被释放的时候而自身却没有被置为null的时候,那么这个
指针
就会变成一个
空悬
指针
。而野
指针
,通俗的表示就是没有进行初始化的
指针
,但是因为一个
指针
没有初始化的
C++
空悬
指针
空悬
指针
当delete之后,
指针
值无效,虽然
指针
值无效,但在很多机器上
指针
仍然保存着已经释放了的动态内存的地址,这个
指针
就变成了
空悬
指针
dangling pointer,即 指向一块曾经保存数据对象但现在已经无效的内存的
指针
。 野
指针
野
指针
是已经定义,但没有指向实际内存的
指针
,对野
指针
解引用等操作是未定义且危险的。 未初始化
指针
(即野
指针
)的所有缺点
空悬
指针
也有。 ...
空悬
指针
和野
指针
区别
空悬
指针
是:它曾经指向一个有效地址,但是现在不再指向有效地址,就是原来的那块地址不能通过这个
指针
区访问了。这通常是因为
指针
所指的内存单位被释放了并且不再有效了。
空悬
指针
存在并没有什么
问题
,除非你尝试通过这个
指针
访问指向的地址空间。不遗留任何悬空
指针
总是最好的实践方式。 野
指针
是这样一种
指针
:它没有被正确的初始化于是指向一个随机的内存地址。存在野
指针
是一个严重的错误 ...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章