在C++动态内存分配中我们常用到new和delete两种操作,new用来申请内存,delete用来释放内存。那么问题来了,我们应该用delete来释放内存还是用delete[]来释放内存呢?

为了得到答案我做了一下实验。(注:一下实验在使用delete和delete[]得到的结果是一样的,不重复po图)

在这里,我先为list申请了内存空间,并且指定list[5] = 5;用于后面判断内存是否已经释放,事实证明内存确实释放了,其中存储的5已经被释放,而输出一个奇怪的数字。

但是我觉得不够严谨,于是

我声明一个引用变量a来访问原来list[5]的地址,确保不是list的地址发生变化而导致list[5]的值发生了变化,事实证明内存确实释放了。

然后我发现了一个问题,那就是每次输出的那个奇怪的数字都是一样的,于是我想list[5]的地址是不是也没变?

然后我猜测:delete只是释放了内存里面的东西,而list指向的地址并没有发生变化。

于是我又做了一个实验

我的天,释放内存后居然还能赋值?!我自己都不相信了,于是我打开VS

如图,我设置了三个断点,得到list在三个断点的地址分别为:

+ list 0x004fa2c0 {-842150451} int *

+ list 0x004fa2c0 {-842150451} int *

+ list 0x00008123 {???} int *

也就是说delete以后list实际上也不存在了,这是Dev编译器与VS编译器的差异

最后结论是delete以后内存释放了,指向的地址也变了,不能再对原来的变量赋值。

还有delete和new搭配着用最好,new[]搭配delete[],new搭配delete。(类对象数组一定要用delete[],基本数据类型两者均可,但最好搭配使用)

最新文章

  1. JavaScript高级程序设计--表单脚本
  2. js获取网页中宽高度集合
  3. JavaScript 变量作用域
  4. XFire最佳实践
  5. UI基础之UIButton相关
  6. Android studio gradle 打包 那些事
  7. MAC JAVA 环境变量那些事
  8. HDU 1718 Rank counting sort解法
  9. C# 中 重载,重写,隐藏的区别
  10. Android之TextView控件的学习
  11. R语言从小木虫网页批量提取考研调剂信息
  12. Python3调用企业微信用于告警
  13. Python 3 使用venv创建虚拟环境
  14. 洛谷P2319 [HNOI2006]超级英雄
  15. React-propsType和defaultProps
  16. 蒟蒻qxt的sd'日常
  17. CMSampleBufferRef转换
  18. Java程序读取Properties文件
  19. 根据条件决定My97DatePicker日期控件弹出的日期格式
  20. Tempdb--TempDB Basic

热门文章

  1. 剑指offer(5)用两个栈实现队列
  2. freeswitch设置支持视频语音编码
  3. Java 设计模式学习笔记1——策略模式(Duck例子)
  4. 【Nodejs】【node.js 安装 和 配置Sublime Text的Node.js】
  5. minicom 安装 查看串口
  6. vue-循环并获取dom元素
  7. Asp.net core 学习笔记 SignalR
  8. vue.config.js初始化配置
  9. MVC 简介
  10. Git:一个简单示例