关于windows下程序的异常捕获

Leckun 2017-06-23 10:17:34
MFC程序在设置异常捕获的时候,尝试过两种方法:
1、设置C++异常时,加上SEH异常,这样try catch就能捕获。
2、设置SetUnhandledExceptionFilter,让异常后回调处理。

以上两种方式在这种异常情况下都能工作:
char* p = NULL;
*p=3;

但是在另外申请内存,再释放后,上面两种都无法捕获异常,怎么回事?有解决方法吗?
*char *p = new char[100];
delete []p;
*p = 'c';
...全文
356 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Leckun 2017-06-30
  • 打赏
  • 举报
回复
谢谢,明白了,结论是内存都是有效的,只是标记为回收,因此没有异常。
赵4老师 2017-06-29
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节中都有值且都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
zgl7903 2017-06-28
  • 打赏
  • 举报
回复
*char *p = new char[100]; delete []p; *p = 'c'; 这个指针仍然是内存堆上有效的内存区域,不会产生异常 最好的 就是 delete 后 指针立即赋值 NULL
Leckun 2017-06-28
  • 打赏
  • 举报
回复
谢谢回复,我不是要找BUG,我是要在这类异常出现的时候,打算捕获它
赵4老师 2017-06-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhao4zhong1/article/details/53078924 老司机找bug的十年心路历程

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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