各位大牛,小弟又碰到问题了,捕捉数据越界异常,本人的代码是这样的
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)
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
加一个if判断能否越界然后加上处理
5
其实电脑开机后物理内存的每个字节都是可读写的,从来不会原因是所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时能否能发现并能否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。