这样的内存异常为什么捕获不到?

谭文宏 2005-11-03 01:10:04
以下程序的内存异常为什么捕获不到?
try
{
char *a = new char[100];
a[200] = 100;
delete [] a;
}
catch(...)
{
printf("a error");
}
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
loverx 2005-11-04
  • 打赏
  • 举报
回复
try
{
int* a = new int[10];
a[100] = 112;
delete []a;
}
catch(...)
{
   cout << "" << endl;
}
更正,这段代码我刚才测试一下(VS。NET),编译器能捕获这个异常
并能够运行正常,很奇怪,等待其他人更好的解释吧
loverx 2005-11-04
  • 打赏
  • 举报
回复
我认为:
就算是异常,你也永远捕获不到
a[200] = 100;已经将整个线程的堆栈破坏,因为试图访问内存保护区域
就算侥幸逃过了,你也破坏了下一内存页面的数据

我想一般的情况下,整个进程都挂掉
mwp 2005-11-04
  • 打赏
  • 举报
回复
因为这不是异常,而是错误
ringphone 2005-11-04
  • 打赏
  • 举报
回复
这是缓冲区溢出,不是异常。能否catch到取决于溢出数据造成了什么破坏。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧