你所不知道的事儿--C++中delete指针后最好赋值为NULL
2015-10-23 23:00
176 查看
我们都知道,在C++中,用new声明的指针变量,都要delete。除非你完完全全使用智能指针,而不用担心内存泄露的问题。
如果你是来自C Sharp阵营,那么也许你习惯于托管代码带来的好处,垃圾内存回收机制。但是C++中,需要手动进行释放,谁分配谁释放。
首先,我要强调的一点就是delete是释放指针指向的内存,而并不是指针本身所占有的内存。 慢慢品味这句话。
我们试图写下如下的代码:
编译的时候没有错误,但是运行的时候就会崩溃。
我们试图调试程序,但令我吃惊的是无法把delete语句设上断点,求大神指导。
我们试图修改上面的代码:把delete后的指针赋值为null
编译成功,运行成功。
因此,为了防止delete两次同一个指针而导致程序崩溃,请把delete后的指针赋值为NULL。
记住一点:
C++ 保证:删除 0 值的指针是安全的。
如果你是来自C Sharp阵营,那么也许你习惯于托管代码带来的好处,垃圾内存回收机制。但是C++中,需要手动进行释放,谁分配谁释放。
首先,我要强调的一点就是delete是释放指针指向的内存,而并不是指针本身所占有的内存。 慢慢品味这句话。
我们试图写下如下的代码:
#include<iostream> using namespace std; int main() { int *p = new int(10); delete p; delete p; return 0; }
编译的时候没有错误,但是运行的时候就会崩溃。
我们试图调试程序,但令我吃惊的是无法把delete语句设上断点,求大神指导。
我们试图修改上面的代码:把delete后的指针赋值为null
#include<iostream> using namespace std; int main() { int *p = new int(10); delete p; p = NULL; delete p; return 0; }
编译成功,运行成功。
因此,为了防止delete两次同一个指针而导致程序崩溃,请把delete后的指针赋值为NULL。
记住一点:
C++ 保证:删除 0 值的指针是安全的。
相关文章推荐
- 你所不知道的事儿--C++中delete指针后最好赋值为NULL
- C语言:利用指针和函数调用编写字符串拷贝函数strcpy
- C语言中的指针理解
- C语言写冒泡排序
- 日志库EasyLogging++学习系列(1)—— 简要介绍
- 华为OJ--合法IP的判断
- 学习记录-C和指针-第十一章 动态内存分配
- C++_inline函数(内嵌函数)
- C语言--在终端输入多行信息,找出包含“ould”的行,并打印改行
- C语言--static的用法
- C语言--将整数n转换为以b进制的数。保存到s中
- 约瑟夫环的问题
- C语言--求n^k
- 【C语言】求两数二进制序列不同的位
- c++学习笔记(九):运算符重载进阶
- C语言小游戏—迷宫游戏的实现
- C语言----结构体
- C++ 队列
- C语言基础之Printf用法
- C++模板详解——使用篇