首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >捕获访问冲突异常?

捕获访问冲突异常?
EN

Stack Overflow用户
提问于 2009-01-19 13:27:03
回答 5查看 122.8K关注 0票数 94

示例

代码语言:javascript
复制
int *ptr;
*ptr = 1000;

我是否可以使用标准的C++捕获内存访问冲突异常,而不使用任何微软特定的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-01-19 13:30:18

不是的。当你做一些糟糕的事情时,C++不会抛出异常,这会导致性能下降。像访问冲突或被零除这样的错误更像是“机器”异常,而不是您可以捕获的语言级别的异常。

票数 46
EN

Stack Overflow用户

发布于 2009-05-28 02:07:04

读一读,痛哭一场!

我想通了。如果不从处理程序抛出异常,处理程序将继续执行,异常也将继续。

当你抛出自己的异常并处理它时,神奇的事情就会发生。

代码语言:javascript
复制
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Signal %d",signal);
    throw "!Access Violation!";
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGSEGV , SignalHandler);
    try{
        *(int *) 0 = 0;// Baaaaaaad thing that should never be caught. You should write good code in the first place.
    }
    catch(char *e)
    {
        printf("Exception Caught: %s\n",e);
    }
    printf("Now we continue, unhindered, like the abomination never happened. (I am an EVIL genius)\n");
    printf("But please kids, DONT TRY THIS AT HOME ;)\n");

}
票数 111
EN

Stack Overflow用户

发布于 2009-01-19 15:10:30

如上所述,在windows平台上没有非微软/编译器供应商的方法来做到这一点。然而,在正常的try {} catch ( exceptions ){}方法中捕获这些类型的异常显然对错误报告和更优雅地退出应用程序很有用(正如JaredPar所说,应用程序现在可能遇到了麻烦)。我们在一个简单的类包装器中使用_se_translator_function,它允许我们在一个try处理程序中捕获以下异常:

代码语言:javascript
复制
DECLARE_EXCEPTION_CLASS(datatype_misalignment)
DECLARE_EXCEPTION_CLASS(breakpoint)
DECLARE_EXCEPTION_CLASS(single_step)
DECLARE_EXCEPTION_CLASS(array_bounds_exceeded)
DECLARE_EXCEPTION_CLASS(flt_denormal_operand)
DECLARE_EXCEPTION_CLASS(flt_divide_by_zero)
DECLARE_EXCEPTION_CLASS(flt_inexact_result)
DECLARE_EXCEPTION_CLASS(flt_invalid_operation)
DECLARE_EXCEPTION_CLASS(flt_overflow)
DECLARE_EXCEPTION_CLASS(flt_stack_check)
DECLARE_EXCEPTION_CLASS(flt_underflow)
DECLARE_EXCEPTION_CLASS(int_divide_by_zero)
DECLARE_EXCEPTION_CLASS(int_overflow)
DECLARE_EXCEPTION_CLASS(priv_instruction)
DECLARE_EXCEPTION_CLASS(in_page_error)
DECLARE_EXCEPTION_CLASS(illegal_instruction)
DECLARE_EXCEPTION_CLASS(noncontinuable_exception)
DECLARE_EXCEPTION_CLASS(stack_overflow)
DECLARE_EXCEPTION_CLASS(invalid_disposition)
DECLARE_EXCEPTION_CLASS(guard_page)
DECLARE_EXCEPTION_CLASS(invalid_handle)
DECLARE_EXCEPTION_CLASS(microsoft_cpp)

最初的类来自这篇非常有用的文章:

http://www.codeproject.com/KB/cpp/exception.aspx

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/457577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档