C语言获取数组越界,除以零等异常

#pragma once

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
//需求安装windows sdk

#define MAX_PATH 260

#define STATUS_POSSIBLE_DEADLOCK		((unsigned long)0xC0000194L)
#define STATUS_MODULE_NOT_FOUND			((unsigned long)0xC06D007EL)
#define STATUS_PROCEDURE_NOT_FOUND		((unsigned long)0xC06D007FL)
#define STATUS_WIND32_EXCEPTION			((unsigned long)0x00003002L)


typedef struct _EXCEPTION_INFO {
	unsigned long code;
	TCHAR info[MAX_PATH + 1];
} EXCEPTION_INFO, *P_EXCEPTION_INFO;

unsigned long seh_filter(unsigned long code, PEXCEPTION_POINTERS pep) {
	static const EXCEPTION_INFO s_except_info[] = {
		{ EXCEPTION_ACCESS_VIOLATION,		_T("Access violation") },
		{ EXCEPTION_ARRAY_BOUNDS_EXCEEDED,	_T("Array bounds exceeded") },
		{ EXCEPTION_INT_OVERFLOW,			_T("Integer overflow") },
		{ EXCEPTION_STACK_OVERFLOW,			_T("Stack overflow") },
		{ STATUS_POSSIBLE_DEADLOCK,			_T("Possible deadlokK") },
		{ EXCEPTION_INVALID_HANDLE,			_T("An invalid handle was specified") },
		{ STATUS_MODULE_NOT_FOUND,			_T("Module not found") },
		{ STATUS_PROCEDURE_NOT_FOUND,		_T("Procedure not found") },
		{ STATUS_WIND32_EXCEPTION,			_T("Wind32 exception") },
		{ ((unsigned long)0x00000000L),		_T("Unkow Exceptions") }
		//...
	};
	unsigned int i;

	for (i = 0; s_except_info[i].code; i++)
	{
		if (code == s_except_info[i].code)
		{
			_tprintf_s(_T("Error Code: 0x%08X, Error Info: %s\n"), code, s_except_info[i].info);
			return EXCEPTION_EXECUTE_HANDLE;
		}
	}

	return EXCEPTION_CONTINUE_SEARCH;
}

int example()
{
	int iRet = 0;
	__try {
		iRet /= 0;
	}
	__except (seh_filter(GetExceptionCode(), GetExceptionInformation())) {
		return GetLastError();
	}
	return iRet;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值