cstring越界_try catch 捕捉数组越界异常

各位大牛,小弟又碰到问题了,捕捉数据越界异常,本人的代码是这样的

int func1()

{

char a[8] = { 0 };

a[10] = “9”; //此处数组越界

return 0;

}

void main(int argc, _TCHAR* argv[])

{

TRY

{

// Do something to throw an exception.

func1();

}

CATCH(CException, e)  // The “inner” catch block

{

printf(“eeeeeeee\n”);

// to the outer catch block below.

}

END_CATCH

getchar();

}

运行不了,直接崩溃:

#if defined (_M_IX86) || defined (_M_X64)

if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE))

#endif  /* defined (_M_IX86) || defined (_M_X64) */

__fastfail(FAST_FAIL_STACK_COOKIE_CHECK_FAILURE);  //进入这里了

工程配置:

启动C++异常:是,但有 SEH 异常 (/EHa)

优化:已禁用 (/Od)

运行库:多线程DLL(/MD)

解决方案

10

数组越界,不是异常,而是会在某种不可预知的时候。

破坏程序的运行。

异常是一种错误处理机制

处理的是相对于正常行为而言,异常的行为。

异常的机制是,先执行,出错再处理异常。

不采用异常的机制是,先检测没问题放过,有问题处理错误。

异常机制,可以集中处理异常

检测并处理的话,要么及时处理,要么层层传递,要么通过全局变量记录错误。

5

引用:

但是,

int func1()

{

char a[8] = { 0 };

a[10] = “9”;  //此处数组越界

return 0;

}

怎么样在a[n] = “9”;  不崩溃啊,本人需要不崩溃的

加一个if判断能否越界然后加上处理

5

其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时能否能发现并能否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明try catch 捕捉数组越界异常!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值