c++ - 抛出(或相应地)NULL 函数参数还是让它全部爆炸?

标签 c++ c validation exception-handling error-handling

在以前需要高稳健性和长正常运行时间的大型应用程序中,我一直用于在记录为“绝不能为 NULL”时验证指针函数参数。然后我会抛出一个 std::invalid_argument 异常,或者类似的,如果参数在 C++ 中实际上是 NULL 并在 C 中返回一个错误代码。

但是,我开始认为也许最好让应用程序在同一个函数中的第一个 NULL 指针取消引用时立即崩溃 - 然后崩溃转储文件会揭示发生了什么 - 并让一个彻底的测试过程找到错误的函数调用。

检查 NULL 并让应用程序崩溃的一个问题是,如果指针实际上并未在该函数中取消引用,而是存储起来供以后使用,那么取消引用会失败- up 将脱离上下文并且更难诊断。

对此有什么想法或最佳实践吗?

编辑 1: 我忘了说,我们的大部分代码都是供第 3 方开发人员使用的库,他们可能了解也可能不知道我们的内部错误处理政策。但是函数仍然被正确记录!

最佳答案

我个人的偏好是记录函数不能接受 NULL 指针这一事实,并就此保留。请注意,虽然不能保证取消引用 NULL 指针会导致崩溃 - 如果您坚持进行诊断,则抛出异常是唯一可移植的解决方案。

话虽如此,我发现在我自己的代码中不需要的 NULL 指针非常非常少见。如果你有很多,它表明其他地方有问题,可能在代码的基本设计中。

关于c++ - 抛出(或相应地)NULL 函数参数还是让它全部爆炸?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3395023/

相关文章:

javascript - 使用 JavaScript 检查 HTML 片段是否有效

javascript - jquery 代码在回发后不起作用

HTML5 验证元数据

c - 如何从共享对象中删除符号?

c++ - 如果 C 有结构,为什么它不是 OOP

c++ - C++中加号的运算符重载

c++ - 查询不断增长的数据集

c++ - 表达式的返回类型是否总是与操作数类型匹配?

c - 在 C 链表中,为什么节点也是指针?

c - scanf() 用于读取格式化输入