C++用delete释放对象之后,为什么还可以继续使用该对象
    int a, *p;
    p = new int;
    a = 5;
    *p = a;
    delete p;
    cout << *p << endl;

输出结果:5

即使delete掉p之后,仍然可以使用

c++
1

1个回答

delete只是释放堆中的空间,并没有将p指针的值改为NULL,所以p仍指向堆中的相应位置(但此位置已被收回可以随时被分配给别的对象,而被更改为其他值)

1
weixin_41827792
小白跑步机 谢谢,还有个疑问,不管是书还是视频课,都说delete之后不能再使用这个对象。所以不能再使用,是在说p指向的位置会被分配给其他对象,再使用会出现异常是吗?
2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++对象被delete之后,其对象指针还能干些啥
先看一段代码,想象它的结果是怎样的?
C++ delete指针后依然可以访问的问题
C++ delete指针后依然可以访问的问题一,第一个dump分析二,第二个DUMP分析三,VC6.0和VS2015下delete指针验证四,结论 &amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;
delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
#include using namespace std; class A { public:         A( void )        {                cout        }                ~A( void )        {            cout        } }; int mai
C++ delete指针依然可访问问题
C++ delete指针依然可访问问题 写在前面               c++之中,指针delete之后,
delete释放基本数据类型和对象数组的方法的区别和原因
2018-03-23 创建人:Ruo_Xiao 开发环境:VS2010 邮箱:xclsoftware@163.com 一、释放C++ 基本数据类型 #include&amp;amp;amp;lt;iostream&amp;amp;amp;gt; using namespace std; struct SData { int i; }; int main() { SData *pD=new SData...
C++用delete释放对象之后,为什么还可以继续使用该对象
```cpprn int a, *p;rn p = new int;rn a = 5;rn *p = a;rn delete p;rn cout << *p << endl;rn rn```rn输出结果:5rnrn即使delete掉p之后,仍然可以使用
C++对象的动态建立与释放详解(new和delete)
我们知道可以用new运算符可以动态的分配内存,用delete运算符可以释放这些内存。当我们使用new运算符动态的分配一个内存之后,会自动返回一个该内存段的起始地址,也就是指针。 =============下面先给出一个new和delete基本应用的例子,回顾一下它的基本用法============ #include using namespace std; int main() {
new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样
转载自http://www.cnblogs.com/sura/archive/2012/07/03/2575448.html1.在释放堆栈中c++基本数据(包括int,char…..结构体等)的存储空间时,不管是否是数组用delete都不会有错!而且能正常释放所有内存,不会导致内存泄露! 2)对象数组不能用delete,只能用delete[];// 程序B class CTextClassA
Qt中new之后需不需要delete的问题
QT的父子对象机制是在 QWidget和QOject中实现的。当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的子对象类表并且删除每一个子对象,然后子对象们自己再删除它们自己的子对象,这样递归调用直到所有对象都被删除。 这种父子对象机制会在很大程度上简化我们的内存管理工作,减少内存泄露的风险。我们需要显试删除(就是用DELET
c++中什么时候用new[]申请,可以用delete释放
首先想到的是c语言中的 **malloc** 和 **free** ,这两个是库函数,而在c++中 new 和 delete是运算符(和 + - * /一样),在使用new的时可以看成使用默认使用构造函数+malloc,使用delete时可以堪称使用析构函数+free。简单说一下malloc 系统管理堆内存运用的是链表的方式:分配堆内存地址时依次由低向高遍历”堆链“,但遇到大小合适的堆块时,将这个
C++中new申请的内存, 可以用free释放吗?
我的标题是我今天看到的一个面试题,看到之后我没急着回答,而是想了一下。 凭自己的直觉吧,猜了个“不可以”的答案,虽然对了,但我不知道为什么。于是 我就查查资料了: 不可以,new对应delete不可以张冠李戴。 malloc/free,new/delete必需配对使用。 malloc与free是c++、c语言的标准库函数,new、delete是c++的运算符。它们都可用用申请动态内存和释
测试对象销毁后指针是否还可以使用
// 04-测试对象销毁后指针是否还可以使用 // // Created by wanghy on 15/8/13. // // //为了直观,直接将.m和.h文件写在main.m中。 #import //定义 person类 包含 姓名,年龄和性别 @interface person : NSObject { @public NSStri
C++之对象的动态建立和释放
new和delete的用法: 1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。 注意: new和delete是运算符,不是函数,因此执行效率高。2)虽然为了与C语言兼容,C++仍保留malloc和f
C++中delete指针后,要将其赋值为NULL的具体原因
delete指针后,只是释放了指针指向的内存空间,但是指针还在,并且指向之前的地址。 举个例子: #include &amp;lt;iostream&amp;gt; using namespace std; int main() { int *p=new int; *p=3; cout&amp;lt;&amp;lt;&quot;将3赋给p的地址后,指针p读取的值:&quot;&amp;lt;&amp;lt;*p&amp;lt;&amp;lt;end...
new出来的对象一定要delete
很多时候,我们会通过new构建一个指针对象:分配内存和调用构造函数。我们知道new和delete一定要配套使用,并且new []和delete []配套使用。但是有些时候,并不知道什么时候需要delete 掉new分配的空间。如以下伪码:
在C++中,用new和delete分配和释放内存:
https://www.cnblogs.com/hugongai/p/5833070.html1.例如,给一个4*5的二维数组分配内存方法一:直接申请二维数组,逐一分配内存 1 int **array; 2 //分配内存 3 array=new int*[4]; 4 5 for (int i=0;i&amp;lt;4;i++) 6 array[i]=new int[5]; 7 8...
C++指针delete后还要置为null
众所周知,最开始我们用new来创建一个指针,那么等我们用完它之后,一定要用delete将该指针删掉。但是,值得注意的是,难道就仅仅是删除这个指针这么简单的么?下面,我们用一个程序来说明这个问题:[cpp] view plain copy#include &amp;lt;iostream&amp;gt;  using namespace std;  int main()   {      int *p=new in...
c++的new和delete的方法使用以及不用new定义变量
new和delete运算符用于动态分配和撤销内存的运算符 new用法:           1.     开辟单变量地址空间                1)new int;  //开辟一个存放数组的存储空间,返回一个指向该存储空间的地址.int *a = new int 即为将一个int类型的地址赋值给整型指针a.                 2)int *a =
C++ this指针(3) - 删除this指针
通常通常情况下,delete操作符不应该用于删除this指针。但是,一旦使用了delete this, 则需要考虑到下面的这些情况。 1) delete 操作符只允许与使用new分配的对象配套使用。 如果对象是用new创建的,则可以使用delete this, 否则会导致未知的行为。 class A { public: void fun() {
QT技巧 - QT中如何确定new对象是否要释放
QT技巧 - QT中如何确定new对象是否要释放 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 目录 QT技巧 - QT中如何确定new对象是否要释放 1.前言 2.QT的自动释放机制 3.结论 环境: QT版本:5.6.2 基础内容阅读: QT基础 - QObject简介 1.前...
C++ —— 用delete []去释放非数组对象导致崩溃的原因
假设有个类Test , 定义了Test *p = new Test;    之后却用delete []p 去释放内存,就会导致程序崩溃或者直接进入无限循环。 分析如下:一段测试的代码 #include&amp;lt;iostream&amp;gt; using namespace std; class Test { public : int m_a; ~Test() {}; }; void main(...
在类中调用delete this问题
很多时候,一些定义在类内的变量的生命周期在类外并不是很好的掌控,这样就很容易造成内存泄漏得到问题 比如以下代码: class Test { public: void foo(); private: char *p; }; void Test::foo() { p = new char[50]; } int main() { Test t1; t1....
单例对象释放问题
/*class A{};A a;单例模式就是全局只有一个类A产生的对象不允许产生多个对象。1.static成员变量实现了同类对象间信息共享2.static成员类外存储,求类大小,并不包含在内3.static成员是命名空间属于累的全局变量,存储在data区4.static成员只能类外初始化5.可以通过类名访问(无对象生成时亦可),也可以通过对象访问*/# include &amp;lt;iostream&amp;g...
delete运算符(删除对象)
html> html lang="en"> head> meta http-equiv="content-type" content="text/html;charset=UTF-8"> title>delete运算符(删除对象)title> script type="text/javascript"> <!-- myObject=new
QT对象释放顺序引起的报错问题
最近在做项目时,遇到一个奇怪的问题——QT对象释放的顺序不对的话,会引起崩溃。具体是这样的: 1、先定义两个QT类(Class1、Class2),下面是头文件: #include &amp;lt;QObject&amp;gt; class Class1 : public QObject {     Q_OBJECT public:     explicit Class1(QObject *parent =...
new 一定要与 delete 配合使用吗?
new和delete 我们在编程时一般要new和delete配合使用,否则会引起内存泄露,请看下面这个程序: #include #include using namespace std;   void fun1(int *&p) {     int i = 10;     p = &i;
Qt父子对象的delete关系
文中代码已测试过 原文地址:http://www.cnblogs.com/foxhengxing/archive/2010/12/24/1916355.html 很多C/C++初学者常犯的一个错误就是,使用malloc、new分配了一块内存却忘记释放,导致内存泄漏。Qt的对象模型提供了一种Qt对象之间的父 子关系,当很多个对象都按一定次序建立起来这种父子关系的时候,就组织成了一颗树。当
delete对象后到底要不要将对象置为NULL
以下是我的一个美国同事丹尼尔对此的看法: Member pointers do NOT have to be set to NULL in a destructor. A destructor, as its name implies, destroys an object and the object can’t be accessed after that. So accessing any
delete 用void*来释放
int main() { CTest *pTest1 = new CTest; void * pvTest1 = nullptr; pvTest1 = (void *)pTest1; delete pvTest1; system(&quot;pause&quot;); return 0; } image.png ...
[C/C++]_[中级]_[delete 类对象指针的注意事项]
场景: 1. C++类有构造和析构函数,析构函数是在类对象被delete时(或局部变量自动销毁时)调用来释放资源。 2. C++类对象指针很多情况下需要赋值给void*通用指针来达到传输对象的目的,但是往往这种void*指针就是造成内存泄漏或程序错误的根源, 这就是为什么C++存在泛型的目的,它也是为了在编译时刻消除这种对象不确定性,避免delete或使用时的错误. 好了,看代码,以下代码有什么问题?
C++对象创建与释放
创建对象有以下四种形式: #include using namespace std; class A{ private: int i; public: A(){ cout<<"调用没有参数的构造函数"<<endl; } A(int a):i(a){ cout<<"调用有一个参数的构造函数"<<endl; } ~A(){cout<<"成员变量为:"<<i<<"\t调用析构函数"<<en
内存管理以及常见内存泄漏处理
(一)内存分配方式 (1)从静态存储区域分配;内存在程序编译的时候就已经分配好,这块内存在程序整个运行期间都存在;例如全局变量、static变量 (2)在栈上创建;在执行函数时,函数调用会开辟栈帧空间,内部的局部变量的存储单元都存在于栈空间,函数体执行完成后这片空间自动被释放 (3)在堆上分配;即就是我们常说的动态内存分配。程序运行期间通过malloc或new申请任意多少内存,程序自己负责在...
关于tinyxml中new出对象却不delete是否存在内存泄露问题
最近使用tinyxml操作xml文件,在操作中老是看到new一个对象但是并没有delete他,作为一个C++工作者,看着很是别扭,也心存疑惑:不delete难道不会内存泄露吗?经过我上网查询,发现有很多种说法,其中一种是tinyxml将所有对象都视为doc对象的子对象(TiXmlDocument对象就是这棵树的根结点, 在一个完整的文档中, 除了它, 其余结点必须都是它的后代, 所以TinyXml...
C++基础---对象数组中delete与delete[]的区别
1. 对象数组中delete与delete[]的区别 1.1 释放动态分配的内存空间 C++中对new申请的内存的释放方式有delete和delete[]两种方式。 (1)delete:释放new分配的单个对象指针指向的内存; (2)delete[]:释放new[]分配的对象数组指针指向的内存; 1.2 关于 new[] 和 delete[]分为两种情况 基本数据类型分配和回收空间; 自定义类型分配和回收空
Qt为何new而不delete
本篇首先介绍一下Qt的内存管理机制,其为QObject类的三大职责之一,QObject的另外两个职责为内省和事件处理。Qt是基于C++的应用框架,平时,我们释放一个指针资源一般采用new和delete相结合的方法,比如:我们生成一个label,代码如下:                      QLabel *MyLabel=new QLabel(&quot;hello, QT!&quot;);等我们不必使用这个l...
iOS-实现weak后,为什么对象释放后会自动为nil
1. 实现weak后,为什么对象释放后会自动为nil runtime 对注册的类, 会进行布局,对于 weak 对象会放入一个 hash 表中。 用 weak 指向的对象内存地址作为 key,当此对象的引用计数为 0 的时候会 dealloc,假如 weak 指向的对象内存地址是 a ,那么就会以 a 为键, 在这个 weak 表中搜索,找到所有以 a 为...
为什么我delete后内存没有被释放?
连接:http://bbs.51cto.com/thread-851025-1-1.html 亲身经历,觉得很奇怪,所以查了下这个问题 struct List { HBufC* aPath; List* next; }; 我用的是链表, List* p; List* pp = head; for(TInt i = 0; i pp = pp->next; while(Info
new出的对象数组必须要用delete[]删除,而普通数组和结构数组delete和delete[]都一样
为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样-----_CrtMemBlockHeader                                                                   温馨提示: 该文所有测试没有特殊说明都是在Debug模式下!用的是VS2010编译器! ======
C++单例模式对象的控制释放分析
单例模式也称为单件模式、单子模式。使用单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很多地方需要这样的功能模块,如系统的日志输出等。  单例模式有许多种实现方法,在C++中,甚至可以直接用一个全局变量做到这一点,但这样的代码显得很不优雅。《设计模式》一书中给出了一种很不错的实现,定义一个单例类,使用类的私有静态指针变量指向类的唯一实例,并用一个公有静
使用delete 删除指针,真的删除了吗
delete指针我们在用动态内存分配时,经常是用new来定义一块内存空间,比如说 int* p = new int(1);这时会在堆上分配一块内存,当作int类型使用,内存中存储的值为1并将内存地址赋值给在栈中的int*类型的p。(注意:p只是一个变量,就像是int a=1中的a一样,不过a是整形变量,而p是指针变量)当我们不用p指针时,往往需要用delete p将其释放,我们需要注意的是释放一个...
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java班级与对象 人工智能培训对象