对指针调用delete之后要记得把指针赋值为nullptr
2017-06-15 09:55
260 查看
对指针调用delete之后要记得把指针赋值为nullptr
否则,如果这个指针被重复delete,会死机。
frank@userver:~/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)
否则,如果这个指针被重复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; }运行结果:
frank@userver:~/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)
相关文章推荐
- delete一个指针之后,要记得设置为NULL
- delete指针之后应该赋值NULL
- delete之后千万要记得将指针置空,即勿重复delete!!!
- delete指针之后应该赋值NULL
- delete指针之后应该赋值NULL
- delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
- delete一个指针之后,要记得设置为NULL
- delete指针之后应该赋值NULL
- 指针被delete之后应该赋值NULL
- delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
- delete指针之后应该赋值NULL
- effective C++笔记之条款6:析构函数里对指针成员调用delete
- 条款6:析构函数里对指针成员调用delete
- 析构函数里对指针成员调用delete[转载]
- C++中new和delete在数组指针和指针数组中的调用
- Delete之后的指针
- delete指针以后应赋值为NULL
- free指针之后,还要赋值为空,防止其成为野指针
- 在C++动态库中释放调用动态库程序中生成的指针new和delete 或 malloc和free
- QList指针中的clear后不会自动释放内存,需要之前调用qDeleteAll()