【发布时间】:2012-02-01 13:41:41
【问题描述】:
我正在尝试删除一个已删除的对象,并且收到一个 SIGABRT 信号。 我知道这个信号会中止我的程序,但我想在信号处理程序中捕获这个信号并显示我正在删除一个已经删除的对象的消息......
这是我尝试过的代码,但它似乎不起作用。 请帮我弄清楚其中有什么问题?
using namespace std;
class myclass
{
public:
myclass() { cout <<"myclass constructed\n"; }
~myclass() { cout <<"myclass destroyed\n"; }
};
void func(int);
int main (void)
{
signal(SIGABRT,func);
myclass * pt;
pt = new myclass[3];
delete[] pt;
delete[] pt;
return 0;
}
void func(int)
{
signal(SIGABRT,func);
cout << "trying to delete unallocated memory, exiting....\n";
exit(0);
}
【问题讨论】:
-
“似乎不起作用”是什么意思? (顺便说一句,在这里工作正常。请尝试格式化您的代码。)
-
它只是中止而不给我消息“试图删除未分配的内存,退出......”
-
如果你是这样定义“工作”的,我看到消息打印得很好 (g++4.6.1/ubuntu 11 x86)。
-
如果我不想中止程序并在正常模式下继续,可以做些什么修改...?
-
双重释放是代码中的一个错误。试图找到一种方法来解决这个问题是错误的。防止它是(唯一的)解决方案。