对指针调用delete之后要记得把指针赋值为nullptr

否则,如果这个指针被重复delete,会死机。

#include <iostream>
using std::cout;
using std::endl;
using std::ostream;

class Tree {
  int height;
public:
  Tree(int treeHeight) : height(treeHeight) {
    cout << __func__ << "(), this = " << this << endl;
  }
  ~Tree() { cout << "~Tree()\n"; }
#if 0 
  friend ostream&
  operator<<(ostream& os, const Tree* t) {
    return os << "Tree height is: "
              << t->height << endl;
  }
#else
  friend ostream&
  operator<<(ostream& os, const Tree& t) {
    return os << "Tree height is: "
              << t.height << endl;
  }
#endif
}; 

int main() {
  Tree* t = new Tree(40);
  delete t;
  //t = nullptr;
  delete t;
}

运行结果:

[email protected]:~/project/test/cpp/new_del$ ./a.out

Tree(), this = 0x13b2010

~Tree()

~Tree()

*** Error in `./a.out‘: double free or corruption (fasttop): 0x00000000013b2010 ***

Aborted (core dumped)

时间: 2024-08-29 11:13:08

对指针调用delete之后要记得把指针赋值为nullptr的相关文章

在类的成员函数中调用delete this

在类的成员函数中能不能调用delete this?答案是肯定的,能调用,而且很多老一点的库都有这种代码.假设这个成员函数名字叫release,而delete this就在这个release方法中被调用,那么这个对象在调用release方法后,还能进行其他操作,如调用该对象的其他方法么?答案仍然是肯定 的,调用release之后还能调用其他的方法,但是有个前提:被调用的方法不涉及这个对象的数据成员和虚函数.说到这里,相信大家都能明白为什么会这样 了. 根本原因在于delete操作符的功能和类对象的

cocos2dx 3.x(获得父类的node型指针调用父类函数this-&gt;getParent())

[html] view plain copy print? void CenterLayer::zhanzheng(CCObject* pSender){ ((GameScene*)this->getParent())->showLayer(GameScene::UI_SelectLayer); } 在这里 this->getParent() 会获得一个父类的一个node型指针,然后转换为父类类型,可以使用这个指针调用父类函数. [cpp] view plain copy print?

[原]捉虫记3:_ConectionPtr指针调用open失败

背景 产品使用MySQL来存储报警服务产生的报警.在报警服务的组件中使用ADO接口 客户方有两台计算机,一台计算机A用来组态,且可以对设备进行调试,操作系统是Win7 64bit 专业版,安装了VS2010:另一台计算机B用作验收后生产环境中使用,操作系统是Win 2008 R2 标准版 我个人在公司的工作机的操作环境是win10 64bit 企业版 问题 在客户公司时,组态.开发.调试都是在计算机A上进行的,运行也是在计算机A上.一切都很正常.当调试完后,就从现场回到杭州,可是后续又出现了一些

指针 new delete

http://www.cnblogs.com/hazir/p/new_and_delete.html int *p=new(10); 创建空间,指向10, int* p=new[10]; 创建数组空间 指针 new delete,码迷,mamicode.com

用函数指针调用函数

#include <stdio.h> int main(void){     int n = 6;     int square(int num);      int (*fptr)(int);  //声明函数指针     fptr = square;   //初始化函数指针     printf("%d square is %d.\n", n, fptr(n));     return (0);  }  int square(int num){     return (n

第十六周 【项目3-用函数指针调用函数】

问题及代码: /* *Copyright (c) 2014,烟台大学计算机学院 *ALL right reserved *文件名:用函数指针调用函数 *作者:童宇 *完成日期:2014年12月16日 *版本号v1.0 *问题描述:用函数指针调用函数 *输入描述: *程序输出:用函数指针调用函数 */ #include <iostream> using namespace std; void eat(); void sleep(); void hitdoudou(); void run(void

16周(指针调用函数)

/* *copyright(c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:16周(指针调用函数) *作者:王忠 *完成日期:2014.12.11 *版本号:v1.0 * *问题描述:按提示输入,通过指针调用函数,输出 *输入描述:1.2.3.4 *程序输出:输出各类 #include <iostream> using namespace std; void eat(); void sleep(); void hitdoudou(); void ru

c++ 指针总结 函数参数指针调用和堆栈内存的分配原理

c++中的char指针 这个char指针很有意思,char指针通常有两种初始化形式.一个是使用char数组初始化,一个是使用char变量初始化. c++当中使用双引号括起来的字符串起始已经被编译器初始化为一个const char[]类型的字符串常量.也就是说"hedd"在赋值给其他变量或常量时实际上是将一个已经在内存中分配了地址的const char数组的头指针赋值给它.如果你使用's'这样的数字量是不能直接赋值给char指针的,因为's'是一个字符而不是拥有内存的字符变量或常量.这种

Qt 智能指针学习(7种QT智能指针和4种std智能指针)

从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel *label = new QLabel("Hello Dbzhang800!"); label->show(); return app.exec(); } 在  从 Qt