C++ 使用信号处理程序释放资源?

C++ 使用信号处理程序释放资源?,c++,valgrind,C++,Valgrind,我写了一个套接字服务器。我意识到当我在Ctrl-C运行时按下Ctrl-C,可能会出现内存泄漏。我用valgrind找到了这个 我的服务器代码非常简单。基本上,我创建一个侦听器对象,启动一个线程来接受连接并尝试加入该线程: try { Server::Listener listener(1234); boost::thread l(boost::bind(&Server::Listener::start, &listener)); l.join();

我写了一个套接字服务器。我意识到当我在Ctrl-C运行时按下Ctrl-C,可能会出现内存泄漏。我用valgrind找到了这个

我的服务器代码非常简单。基本上,我创建一个侦听器对象,启动一个线程来接受连接并尝试加入该线程:

 try {
    Server::Listener listener(1234);

    boost::thread l(boost::bind(&Server::Listener::start, &listener));

    l.join();

} catch(exception& e) {
    cout<<e.what()<<endl;
}
试试看{
服务器::监听器(1234);
boost::线程l(boost::bind(&Server::Listener::start,&Listener));
l、 join();
}捕获(例外和e){
cout>&&(thread.hpp:171)
==3580==0x404CA4:main(main.cpp:179)
==3580==
==3580==泄漏摘要:
==3580==肯定丢失:0个块中有0个字节
==3580==间接丢失:0个块中有0个字节
==3580==可能丢失:1个块中有288字节
==3580==仍可访问:23个块中的2888字节
==3580==被抑制:0个块中有0个字节
==3580==不显示可访问块(找到指针的块)。
==3580==要查看它们,请重新运行:--泄漏检查=完整--显示可访问=是
==3580==
==3580==对于检测到的和抑制的错误计数,请使用:-v
==3580==错误摘要:1个上下文中的1个错误(已抑制:2个上下文中的2个)
杀死

它指出可能丢失了288字节。我想我可以使用一个信号处理程序来释放这个资源。但我不知道怎么做。你能给我一个例子吗

干杯,
Elton

当进程关闭时,操作系统会自动清理该进程拥有的所有内存。当程序退出时,您无需担心释放内存


您确实需要担心的泄漏类型是那些在程序生命周期内持续泄漏的泄漏。

当进程关闭时,操作系统会自动清理该进程拥有的所有内存。您不需要担心在程序退出时释放内存


您确实需要担心的泄漏类型是那些在程序生命周期内持续泄漏的泄漏。

原则上,您可以在那里销毁对象。在信号处理程序中可以执行的操作有限制,并且它们与线程的混合非常严重。请注意,在这方面,编译器不能执行任何操作(或很少执行)检查,信号处理程序只是一个普通函数。请格外小心


答案提供了一些关于如何执行的细节。

原则上,您可以在那里销毁对象。在信号处理程序中可以执行的操作有一些限制,它们与线程的混合非常严重。请注意,在这方面,编译器不能执行任何操作(或很少执行)检查,信号处理程序只是一个普通函数。请格外小心


答案提供了一些关于如何做的细节。

这涵盖了ctrl-C完成程序的情况。@vonbrand…除非我误解,否则这就是他在这里的目标。我想这就是我的目标。感谢涵盖ctrl-C完成程序的情况。@vonbrand…除非我误解,否则是w他在这里的目标是做什么。我想这就是我的目标。谢谢