C/C++异常捕获try{}catch(...) // __try{ //...}__except(EXCEPTION_EXECUTE_HANDLER){ //...}

54 篇文章 0 订阅
// TestVS2003.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>

VOID TestException_MS(VOID);
VOID TestException_StdCPP(VOID);

int _tmain(int argc, _TCHAR* argv[])
{
    TestException_MS();         // 测试MS专用的C/C++异常捕获机制
    TestException_StdCPP();     // 测试标准C/C++的异常捕获机制
    
    getchar();
	return 0;
}


VOID TestException_MS(VOID)
{
    // 微软专用异常捕获:__try{ //...}__except(EXCEPTION_EXECUTE_HANDLER){ //...}
    // 在VS中该异常捕获机制对Debug、Release版本都生效
    __try
    {
        PBYTE pbAddr = (PBYTE)00001234;     // 给一个非法地址 
        *pbAddr = 0x55;                     // 触发异常
    }
    __except(EXCEPTION_EXECUTE_HANDLER)
    {
        printf("__try{}__except(EXCEPTION_EXECUTE_HANDLER){}捕获到了异常...\n");
    }
}


VOID TestException_StdCPP(VOID)
{
    // 标准C++异常捕获:try{}catch(...)
    // 在VS中该异常捕获机制默认情况下只对Debug版本生效,因为debug版本没有做优化,
    // 要想Release版本也生效,需要这样设置Release版本工程属性:
    // 项目--->xxx属性--->配置属性--->C/C++   --->命令行,在“附加选项”中输入:/EHa,然后确定即可。
    try
    {
        PBYTE pbAddr = (PBYTE)00001234;     // 给一个非法地址 
        *pbAddr = 0x55;                     // 触发异常
    }
    catch(...)
    {
        printf("try{}catch(...){}捕获到了异常...\n");
    }
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
C++中,是可以使用try-catch语句来捕获异常的。然而,与Java不同,C++并没有提供专门用于捕获空指针异常(NullPointerException)的异常类型。相反,C++使用了一种更通用的异常处理机制,即通过使用"..."来捕获所有类型的异常。在C++中,可以使用try-catch语句来捕获空指针异常。例如,可以使用以下代码来测试捕获空指针异常: ```cpp #include <iostream> void catch_null_except() { int* p = nullptr; try { int x = 100 * (*p); // 这里会引发空指针异常 } catch (...) { std::cout << "Catch exception!" << std::endl; } } int main() { catch_null_except(); return 0; } ``` 注意,在C++中,空指针异常实际上是未定义行为,因为对空指针进行解引用是非法的操作。因此,C++标准库并没有定义特定的异常类型来表示空指针异常。然而,通过使用try-catch语句,我们可以捕获并处理这种未定义行为。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [当C++遇到空指针异常......](https://blog.csdn.net/moter/article/details/124312685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [JAVA异常处理](https://blog.csdn.net/qq_45173974/article/details/125091061)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friendan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值