c++ - 故意崩溃的代码

标签 c++ coding-style crash assert

<分区>

Possible Duplicate:
What is the easiest way to make a C++ program crash?

我在我们的代码库中经常看到一个结构,程序以某种方式进入无效状态,代码会故意做错事,只是为了强制崩溃。它通常是这样的:

if(<something is wrong>)
{
    int *ptr = NULL;
    *ptr = 0;
}

这当然会导致空引用异常并以不可恢复的方式使程序崩溃。我只是想知道这是否真的是最好的方法?首先,它读起来不好。如果不发表评论,您可能不会意识到这里发生的崩溃是有意为之的。其次,几乎没有办法从中恢复。它不会抛出异常,因此无法由其他代码处理。它只会杀死程序而无法回溯。它也没有提供太多关于为什么它必须在这里崩溃的线索。它会在所有构建中崩溃,不像断言。 (我们确实有一个非常强大的断言系统可用,但在这种情况下并不总是使用它。)

这是我们到处都在使用的风格,我无法说服其他人。我只是很好奇这在行业中有多普遍。

最佳答案

您不能故意使程序“崩溃”,因为根据其定义,崩溃是程序出现错误并且无法确定地运行时。

终止执行的标准方法是通过std::terminate;实现这一点的通常方法是调用 std::abort,它会针对进程发出一个不可阻塞的信号(自动导致 std::terminate),并且还会导致许多操作系统生成核心转储。

关于c++ - 故意崩溃的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13502256/

相关文章:

c++ - Richedit 控件的奇怪行为,文本像古日语一样水平书写

c++ - 可变参数模板类的部分特化是否应该支持非可变参数特化

带有 json 文件的 C++ Boost 程序选项

c++ - 过度使用重新定义原始数据类型?

iphone - objc_msg发送崩溃:如何找到位置?

Swift 数组(bufferPointer)EXC_BAD_ACCESS 崩溃

c++ - std::map:它可以在插入键后复制和移动键吗?

java - 如何将带有嵌套枚举的枚举对象作为参数传递给方法?

c - C++ 注释在 C 中被认为是糟糕的风格吗?

android - 防止应用程序因谷歌本地库错误而崩溃