在分段期间,错误可以调用析构函数
During Segmentation fault can destructor called
嗨,朋友,如果在程序执行过程中发生分段错误,我有一个查询,可以调用自动创建对象的析构函数吗?我正在编写一个代码并故意创建分段错误来检查析构函数是否会被调用。
#include<iostream>
using namespace std;
class hello
{
public:
int b;
};
class test
{
public :
hello *ptr;
int a;
void function()
{
ptr = new hello;
}
test()
{
cout<<"constructor called"<<endl;
}
~test()
{
cout<<"destructor called"<<endl;
delete ptr;
}
};
int main()
{
test obj;
obj.function();
obj.a = 500;
test *ptr ;
ptr-> a = 900; //To create segmentation fault
}
输出:调用的构造函数
未调用析构函数。所以我无法删除在 destructor
test *ptr ;
ptr-> a = 900;
是未定义的行为ptr
因为它是一个悬空的指针,所以任何事情都可能发生。析构函数可能会被调用,也可能不会被调用,一切皆有可能。
要使其指向有效对象,可以将其分配给 obj 的地址:
test* ptr = &obj;
要创建新的动态分配对象,可以使用new
:
test* ptr = new test;
但是如果你这样做,你必须自己处理内存管理:
delete ptr;
不,不会调用析构函数,因为分段错误是操作系统向程序发送中断以尝试访问受保护的内存的结果。 中断将停止程序的执行,并且无法继续。
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常