利用c++信号析构死循环中的资源

a.h:

复制代码
#include <iostream>
 int *a1 = new int[5];
using namespace std;
class AA
{
public:
	AA();
	~AA();
	void work();
   static void signalHandler(int signum);
private:
	
};

AA::AA()
{
}

AA::~AA()
{
}

a.cpp:

复制代码
#include "a.h"
#include <cstdlib>
#include <signal.h>
#include <unistd.h>
void AA::work() {
    // 注册信号处理程序
	signal(SIGINT, signalHandler);
	signal(SIGSEGV, signalHandler);
	signal(SIGTERM, signalHandler);
	int c = 0;
	while (true)
	{
		a1[c] = c + 1;
	}
    //后面的代码不会执行
	cout << 111 << endl;
}
void AA::signalHandler(int signum)
{
    delete[] a1;cout<<"delete a1"<<endl;
	// 退出程序
	std::exit(signum);
}
int main() {
	
	AA a;
	a.work();
}

运行截图:

相关推荐
雪碧聊技术2 分钟前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
通信小呆呆3 分钟前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
码云数智-园园12 分钟前
C++20 Modules 模块详解
java·开发语言·spring
benben04430 分钟前
强化学习之DQN算法族(基于gymnasium开发)
算法
swordbob1 小时前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享1 小时前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.1 小时前
C语言--day30
c语言·开发语言
玖玥拾2 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
何以解忧,唯有..2 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang