崩溃通常是由非法指令引起的,例如访问无效内存、被零除等。这通常表现为操作系统处理的众所周知的异常。
挂起可以分为两个相当高级别的类别:
Deadlock,通常是由两个线程竞争一个资源引起的,每个线程都需要释放另一个线程持有的资源。一个常见的原因是在多个线程中以不一致的顺序获取多个锁,导致公共ABBA deadlock pattern (不,这与瑞典pop music).Livelock,无关,这意味着代码仍在活动运行,但是您已经达到了不能离开的状态。例如:2个进程/线程的状态不断变化,永远不会达到退出条件永远不会得到满足的结束条件循环,或者无限循环(尽管这扩展了exit的定义
根据问题评论进行更新
:实际上我正在检查一个挂起的代码,但我看到了一些内存泄漏的问题。但我真的不确定内存泄漏是否会导致程序挂起。- jasonline
内存泄漏可能会导致程序崩溃,但这取决于各种因素:
应用程序的leak
Frequency of leak
Lifetime of 的大小
内存泄漏可能会导致两个不好的事情--进程不断增加内存使用量,以及内存碎片。如果操作系统不能提供连续的内存块,这两种情况都会导致无法向下分配内存。
在C++中,如果new操作符分配内存失败,将抛出std::bad_alloc异常。这很可能会被操作系统捕获,导致崩溃(除非您在应用程序中为此异常编写了特定的处理程序,并且能够更优雅地处理它)。