免费注册 查看新帖 |

Chinaunix

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

[C++] 关于c++ delete的困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-08 18:05 |只看该作者 |倒序浏览
请看代码
  1. #include<iostream>
  2. #include<string>

  3. using namespace std;

  4. struct Student
  5. {
  6.         int Num;
  7.         string Name;
  8.         float Sorce;
  9. };

  10. int main()
  11. {
  12.         Student *p;
  13.         p = new Student;

  14.         cin >> p->Num;
  15.         cin >> p->Name;
  16.         cin >> p->Sorce;

  17.         delete p;

  18.         cout << "打印输出" << endl;

  19.         cout << p->Num << endl;
  20.         cout << p->Name << endl;
  21.         cout << p->Sorce << endl;
  22.        
  23.         return 0;
  24. }
复制代码
运行结果如下:

请问为什么内存没有全部回收。

论坛徽章:
1
白羊座
日期:2014-01-14 17:31:01
2 [报告]
发表于 2011-04-08 18:15 |只看该作者
你这个问题应该和你的编译环境相关,指针delete后,有的不会将其内容置空,而且delete之后你去使用这个指针本来的内容就是不可预期的,什么值都有可能。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
3 [报告]
发表于 2011-04-08 18:15 |只看该作者
使用野指针是未定义行为,未定义啊

论坛徽章:
0
4 [报告]
发表于 2011-04-08 18:19 |只看该作者
本帖最后由 guangzi1984 于 2011-04-08 18:21 编辑

回复 2# gradkid
既然delete指针后,再使用指针获取的内容是不是预期的,那么delete意义在那里。
指针delete后,指针的地址没有改变。
(不好意思,我是初学,所以..........
而且,我试过,在结构体中多加几个成员,只要是int或float的话,在delete指针后,都不会被回收内存,string类型到是被回收了。

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
5 [报告]
发表于 2011-04-08 18:28 |只看该作者
回复  gradkid
既然delete指针后,再使用指针获取的内容是不是预期的,那么delete意义在那里。
指针dele ...
guangzi1984 发表于 2011-04-08 18:19



人家string有析构函数,你的结构体没的,编译器帮你生成了一个

论坛徽章:
0
6 [报告]
发表于 2011-04-08 18:55 |只看该作者
delete后,那段内存表示可以被挪作它用了,但系统并不保证对那段内存清空,所以你通过原指针依然有可能访问到原来的数据。当然这种行为是不正确的。

论坛徽章:
0
7 [报告]
发表于 2011-04-08 20:33 |只看该作者
delete, 只负责对内存的释放,并不负责清空内存。你使用已经释放的内存的行为属于未定义的行为。这种行为不一定会马上core掉。

论坛徽章:
30
黑曼巴
日期:2019-04-11 12:11:0215-16赛季CBA联赛之八一
日期:2019-06-11 14:31:1915-16赛季CBA联赛之八一
日期:2019-08-06 09:37:182016科比退役纪念章
日期:2020-04-26 09:09:56黑曼巴
日期:2020-12-23 10:47:1015-16赛季CBA联赛之吉林
日期:2021-04-02 13:50:272016科比退役纪念章
日期:2022-08-01 15:03:15黑曼巴
日期:2023-10-07 16:19:58黑曼巴
日期:2018-09-12 13:34:41CU十四周年纪念徽章
日期:2018-06-19 21:17:58洛杉矶湖人
日期:2015-03-02 16:07:282022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32
8 [报告]
发表于 2011-04-08 20:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:56:11
9 [报告]
发表于 2011-04-09 07:05 |只看该作者
不可預料

论坛徽章:
1
白羊座
日期:2014-01-14 17:31:01
10 [报告]
发表于 2011-04-09 08:21 |只看该作者
人家string有析构函数,你的结构体没的,编译器帮你生成了一个
egmkang 发表于 2011-04-08 18:28



    介个。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP