VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 2176|回复: 6

delete 和delete[]的区别

[复制链接]
00_avatar_middle
最佳答案
2 
donate_vip 发表于 2021-7-16 11:30:47 | 显示全部楼层 |阅读模式
我定义的了一个char *指针,然后new了一个数组,我最后使用delete 和delete[]哪个进行释放,这两个之间有什么区别




上一篇:VS2019社区版,MFC新建项目显示缺少MFC库
下一篇:www.codeproject.com进不去
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-7-17 18:54:13 | 显示全部楼层
etwau 发表于 2021-7-17 10:01
我还有两个问题想咨询一下:
1、如果我new了一个多维数组,是需要带多个[]吗?
2、如果我new了一个数组 ...

1、for循环遍历delete[index]。
2、会导致内存泄漏,某些时候可能导致程序崩溃。
07_avatar_middle
最佳答案
12 
在线会员 发表于 2021-7-16 13:21:20 | 显示全部楼层
建议自己写一个简单的类,然后new和delete试试。比用简单的基本类型char之类的可以加深理解。

  1. class o
  2. {
  3. public:
  4.     o() { std::cout << "o()" << std::endl; }
  5.     ~o(){ std::cout << "~o()" << std::endl; }
  6.     int a = 0;
  7. };
复制代码


在vs2017 x86 release下编译的时候,如果通过o*p = new o[5]这种形式申请内存,通过delete p;释放的话,程序会崩。。。
17_avatar_middle
最佳答案
41 
在线会员 发表于 2021-7-16 18:05:23 | 显示全部楼层
  1. char *pc = new char('a'); //开辟一个内存单元,并用括号里的初始化
  2. char *pca = new char[15]; //开辟一个数组
  3. PS:
  4. 释放内存的方法也不一样:
  5. delete pc;
  6. delete []pc;
复制代码
31_avatar_middle
最佳答案
62 
在线会员 发表于 2021-7-16 20:31:42 | 显示全部楼层
记住一个规则,new的是对象数组,也就是new的对象后边带[]时,delete时就必需带上[],反之则不用。
00_avatar_middle
最佳答案
2 
ico_lz  楼主| 发表于 2021-7-17 10:01:03 | 显示全部楼层
cpp2019 发表于 2021-7-16 20:31
记住一个规则,new的是对象数组,也就是new的对象后边带[]时,delete时就必需带上[],反之则不用。

我还有两个问题想咨询一下:
1、如果我new了一个多维数组,是需要带多个[]吗?
2、如果我new了一个数组,delete 的时候不带[]会有什么后果?
00_avatar_middle
最佳答案
2 
ico_lz  楼主| 发表于 2021-7-17 10:02:33 | 显示全部楼层
freehawkzk 发表于 2021-7-16 13:21
建议自己写一个简单的类,然后new和delete试试。比用简单的基本类型char之类的可以加深理解。

我昨天使用vs 2019 debug x86进行测试的时候使用delete 和delete[]都没有出现问题
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2023-9-24 21:10

Powered by CcTry.CoM

© 2009-2021 cctry.com

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