VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 376|回复: 6

new与delete的一点疑问

[复制链接]
18_avatar_middle
最佳答案
0 
在线会员 发表于 2020-5-26 22:26:58 | 显示全部楼层 |阅读模式
  1. #include<iostream>
  2. using namespace std;
  3. char * fun()
  4. {
  5.         char * p1 = new char[];
  6.         return p1;
  7. }
  8. void main()
  9. {
  10.         char * P2;
  11.         P2 = fun();
  12.         delete[] P2;

  13.         char * p3 = new char[];
  14.         char * p4;
  15.         p4 = p3;
  16.         delete[] p4;
  17.         cin.get();
  18. }

复制代码


代码中,delete [] name是释放了pn的内存空间?
如果是的话,那后面p2与p1是不是也是同样的情况?
delete [] p2为什么没有释放p1呢?




上一篇:代码在devc++运行良好,在vs2013不能执行
下一篇:线程中while加入sleepCPU使用率
70_avatar_middle
最佳答案
17 
在线会员 发表于 2020-5-27 09:38:04 | 显示全部楼层
p1 和 p3 都被释放了,你是怎么看出来   
delete [] p2为什么没有释放p1呢?
的?
另外你这代码能编译过? 用的什么神奇编译器呀new与delete的一点疑问
19_avatar_middle
最佳答案
7 
在线会员 发表于 2020-5-27 01:50:43 | 显示全部楼层
内存是内存  赋值是赋值  p1内存的值给p2了  但是给p1分配的内存还在
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-5-27 19:28:39 | 显示全部楼层
tony666 发表于 2020-5-27 09:38
p1 和 p3 都被释放了,你是怎么看出来     的?
另外你这代码能编译过? 用的什么神奇编译器呀

调用fun那段,是一本教材上的例子,它这样讲的,说是p1被释放掉了。
我没理解,所以自己加了段p3、p4,然后发现p3没被释放掉,所以才有了这个提问。
vs2013,这个版本挺神奇的。
18_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-5-27 19:38:53 | 显示全部楼层
236a 发表于 2020-5-27 01:50
内存是内存  赋值是赋值  p1内存的值给p2了  但是给p1分配的内存还在

调用fun那段,是一本教材上的例子。它讲的是这么做P1被释放掉了。
我就疑惑在这里了。p1的内存实际上是还在的?
70_avatar_middle
最佳答案
17 
在线会员 发表于 2020-5-27 20:41:41 | 显示全部楼层
张小顺 发表于 2020-5-27 19:28
调用fun那段,是一本教材上的例子,它这样讲的,说是p1被释放掉了。
我没理解,所以自己加了段p3、p4, ...

理论上是释放了,我用vs2019调试也显示释放了
“释放”的意思是 p3指向的内存块被被标记为可分配 ,但是p3原来等于多少,delete之后还是多少,只不过你没法通过p3来“合法地”操作原来这块内存了
09_avatar_middle
最佳答案
0 
在线会员 发表于 2020-6-3 21:14:26 | 显示全部楼层
delete [] p1才会释放p1
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-18 18:40

Powered by CcTry.CoM

© 2009-2020 cctry.com

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