在C/C++中,当指针需要删除时,对于new的指针,调用delete就可以删除 比如
int* p = new int(17);
delete p;
有时候为了避免使用错误,一般在delete之后,将p置为NULL,即
int* p = new int(17);
delete p;
p = NULL;
有时候为了方便及统一处理指针的申请及释放,一般放到将删除操作放到一个方法中去做,
int* p = new int(17);
void deleteP(int* a){
delete a;
a = NULL;
}
但是这样对a赋值为NULL,对于调用的指针p来说,虽然p占用的内存被释放了,但是p这个指针还是指向delete之前的地址,即p != NULL ,所以某些通过根据 p是否为NULL进行判断而执行的操作就不对了,比如
if ( p != NULL)
{
.....
}
上面的做法就不对了
有一个方法可以解决,就是指针释放的时候,传递进去的不是指针,而是指针的引用,即
int* p = new int(17);
void deleteP(int*& a){
delete a;
a = NULL;
}
这样调用p就变为NULL了,上面的根据p是否为NULL进行的判断也就正确了
有时候这种操作也可以通过一个宏定义去完成,即
#define CC_SAFE_DELETE(p) if(p) { delete (p); (p) = NULL; }
因为宏定义执行的时候,是到调用处进行展开,并不像方法那样做,所以通过宏定义进行删除后,调用指针p也就变成NULL了。
分享到:
相关推荐
学生管理系统的核心功能通常包括以下几个部分: 1. 学生信息管理:添加、删除、修改和查询学生的基本信息,如姓名、学号、班级等。这需要设计一个“学生”类来存储这些信息,并通过文件或数据库进行持久化存储。 2...
标题“C/C++安全检查工具预处理器的设计与实现”意味着本文将介绍如何设计和构建一个专门用于C/C++语言的安全检查工具中的预处理器部分。预处理器是编译过程中的第一步,它负责处理源代码文件中的预处理指令,如宏...
C/C++ STL(Standard Template Library,标准模板库)是C++编程语言中不可或缺的一部分,它提供了...通过中文文档`C C++ API.chm`,你可以深入学习每个组件的使用方法、接口和实现细节,以便更好地应用在实际项目中。
8. **MALLOC/FREE与NEW/DELETE的区别**:探讨C语言的内存分配函数与C++的新建/删除操作符之间的差异。 9. **内存耗尽应对策略**:当系统内存耗尽时,提供几种可能的解决方案。 10. **MALLOC/FREE使用要点**:给出...
接下来详细介绍几个关键函数: 1. **keep_min_heap**:调整最小堆,确保堆的性质(父节点的权值小于或等于子节点)。 2. **heap_insert**:向最小堆中插入新的元素。 3. **heap_extract_min**:从最小堆中删除并...
从"list.c"这个文件名来看,我们可以推测代码可能涉及到以下几个C/C++的知识点: 1. **链表数据结构**:链表是一种基础但重要的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表可以是...
根据提供的部分代码,我们可以看到如下几个函数的定义: 1. **初始化队列** (`QueueInit`): 初始化一个空的循环队列。 - 分配内存给队列的尾指针。 - 尾指针指向自身,表示队列为空。 2. **插入元素到队列** (`...
【标题】:“C语言C++课程设计_通讯录”是一个基于C语言和C++的编程实践项目,旨在帮助学生深入理解和应用这两种编程语言的基本概念和技术。这个课程设计的重点是实现一个通讯录系统,该系统能够存储联系人的基本...
根据给定的文件标题、描述、标签以及部分内容,本文将围绕C/C++语言中的几个典型面试题目进行解析,包括但不限于虚拟函数的概念、字符串操作、内存管理、宏定义的行为以及常量指针的理解等方面。 ### 1. 虚拟函数...
项目的实现可能涉及到以下几个关键知识点: 1. **继承与多态性**:通过类的继承实现各种动物类,利用多态性允许不同的动物以统一的方式处理(如展示、喂食)。 2. **封装**:隐藏类的内部实现细节,只暴露必要的...
C/C++提供了底层控制能力,适合处理数据结构的细节,例如内存管理、指针操作等。在VC6.0环境下,开发者可以体验到经典的集成开发环境和调试工具,有助于学习和优化代码性能。 四、课程设计流程 每个课程设计文档...
C程序员可以省略函数原型,而C++不可以,一个不带参数的C函数原型必须把void写出来。而C++可以使用空参数列表。 C++中new和delete是对内存分配的运算符,取代了C中的malloc和free。 标准C++中的字符串类取代了C...
在封装类的设计上,通常会包含以下几个关键部分: 1. **连接管理**:创建和销毁数据库连接。封装类可能会包含一个`connect`函数,用于输入数据库服务器地址、用户名、密码和数据库名等信息,建立连接。同时,还会有...
C++ 提供了以下几个方面的优势: - **性能高**:C++ 编译后的代码运行速度非常快,适合高性能计算。 - **资源控制**:C++ 允许开发者直接操作内存,对资源有更精细的控制。 - **广泛的库支持**:C++ 拥有丰富的第三...
C++的学习分为几个关键部分:基础语法、面向对象编程、STL(标准模板库)和高级特性。这本教程可能涵盖了这些主题,让读者在21天内逐步建立起对C++的深入理解。 首先,基础语法是学习任何编程语言的起点,包括变量...
C和C++作为两种广泛使用的编程语言,提供了丰富的工具来实现这个问题。以下是几种可能的解决方案: 1. 使用链表:创建一个单链表,每个节点代表一个人,节点包含值(报数)和指向下一个节点的指针。遍历链表,每次...
根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### C++程序设计基础 #### 1. C++语言概述 - **定义与历史**:C++是一种通用的、面向对象的编程语言,由Bjarne Stroustrup在1979年开始设计并实现。它...