C++异常
文章平均质量分 87
dvlinker
2022年度博客之星Top5、CSDN博客专家、B站优质视频教程创作者、AI人工智能技术爱好者、C/C++领域优质创作者、优质技术专栏《C++软件调试与异常排查从入门到精通系列教程》作者。从事C++软件开发十多年,通过数年的软件开发实践,积累了大量的实战经验,特别在C++软件调试及异常排查方面积累了丰富的经验,现任C++高级软件工程师!
展开
-
C++中new申请内存失败抛出异常的处理
正常情况下,执行new操作时都能申请到内存,并返回一个有效的地址。但在某些异常的情况下,会出现申请内存失败的情况。 new操作返回NULL申请不到内存,或者new时抛出异常,可能有以下几种原因引起的:1)用户态的内存已经达到了上限,申请不到内存了有可能是虚拟内存占用太多,也有可能代码中有内存泄露,导致用户态的内存被消耗完了。2)进程中的内存碎片过多如果进程中在大量的new和delete,产生了大量的小块内存碎片,可用的内存大多是一小块一小块的小内存块,而要申请的是一块长......原创 2022-02-28 10:51:38 · 8063 阅读 · 2 评论 -
C++指针未初始化引发的程序奔溃问题
在功能自测的时候无意中发现了一个奔溃的问题,于是立即进入debug模式进行调试,复现了之前的奔溃情况,结果发现是奔溃在对指针操作的地方。于是,怀疑是不是出现对空指针进行操作了,查看了指针的值,是“0xcdcdcdcd”。也没多想,既然不是空值,那么为何会导致程序奔溃呢?那会不会是因为之前已经将指针对象delete掉了呢?查看了相关代码,发现指针变量仅仅是保存窗口指针,并没有执行相关的new操作。于原创 2012-04-27 13:08:46 · 1628 阅读 · 0 评论 -
C++递归调用过多导致的栈溢出问题说明
今天在排查一个导致程序奔溃的bug,经调试发现其中的原因:代码中使用到CTreeCtrl树控件,控件中有上千个节点,代码中为实现相关的应用,需要递归遍历整个树控件,从而导致栈溢出的问题。 那么过多的递归调用为什么会引起栈溢出呢?事实上,函数调用的参数是通过栈空间来传递的,在调用过程中会占用线程的栈资源。而递归调用,只有走到最后的结束点后函数才能依次退出,而未到达最后的结束点之前,原创 2012-05-29 22:55:22 · 15832 阅读 · 1 评论 -
VC中关于 0xcccccccc、0xcdcdcdcd和 0xfeeefeee 异常值说明
VC在调试时,可能会报“写入位置0xcccccccc 时发生访问冲突”,或者“写入位置0xcdcdcdcd 时发生访问冲突”,这些问题可能是由于使用了未初始化的指针引起的。原创 2013-09-15 17:51:47 · 9893 阅读 · 0 评论 -
深入解析结构化异常处理(SEH) - by Matt Pietrek
深入解析结构化异常处理(SEH) - by Matt Pietrek转载 2016-09-18 16:03:18 · 14308 阅读 · 7 评论