关于网友提出的“ 这样的内存异常为什么捕获不到?”问题疑问,本网通过在网上对“ 这样的内存异常为什么捕获不到?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 这样的内存异常为什么捕获不到?
描述: 以下程序的内存异常为什么捕获不到?
try
{
char *a = new char[100];
a[200] = 100;
delete [] a;
}
catch(...)
{
printf("a error");
}
解决方案1: try
{
int* a = new int[10];
a[100] = 112;
delete []a;
}
catch(...)
{
cout << "" << endl;
}
更正,这段代码我刚才测试一下(VS。NET),编译器能捕获这个异常
并能够运行正常,很奇怪,等待其他人更好的解释吧
解决方案2: 我认为:
就算是异常,你也永远捕获不到
a[200] = 100;已经将整个线程的堆栈破坏,因为试图访问内存保护区域
就算侥幸逃过了,你也破坏了下一内存页面的数据
我想一般的情况下,整个进程都挂掉
解决方案3: 因为这不是异常,而是错误
解决方案4: 这是缓冲区溢出,不是异常。能否catch到取决于溢出数据造成了什么破坏。
以上介绍了“ 这样的内存异常为什么捕获不到?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3400907.html