c – 抛出(或相应地)NULL函数参数而不是让它全部爆炸?

c – 抛出(或相应地)NULL函数参数而不是让它全部爆炸?,第1张

概述在之前需要高健壮性和长启动时间的大规模应用程序中,我一直在验证指针函数参数,当它被记录为“绝不能为NULL”时.如果参数在C中实际为NULL并在C中返回错误代码,那么我会抛出一个std :: invalid_argument异常或类似的异常. 但是,我开始认为也许最好让应用程序立即在同一个函数中的第一个NULL指针取消引用中爆炸 – 然后崩溃转储文件将揭示发生了什么 – 并让一个彻底的测试过程发现 在之前需要高健壮性和长启动时间的大规模应用程序中,我一直在验证指针函数参数,当它被记录为“绝不能为NulL”时.如果参数在C中实际为NulL并在C中返回错误代码,那么我会抛出一个std :: invalID_argument异常或类似的异常.

但是,我开始认为也许最好让应用程序立即在同一个函数中的第一个NulL指针取消引用中爆炸 – 然后崩溃转储文件将揭示发生了什么 – 并让一个彻底的测试过程发现坏的函数调用.

不检查NulL并让应用程序爆炸的一个问题是,如果指针实际上没有在该函数中解除引用,而是存储以供以后使用,那么解除引用爆炸将脱离上下文并且更难以诊断.

有关于此的任何想法或最佳做法?

编辑1:我忘了提到我们的许多代码都是第三方开发人员的库,可能会或可能不知道我们的内部错误处理策略.但功能仍然正确记录!

解决方法 这是一个简单的电话.当没有预期时获得NulL指针是程序中的错误或程序状态严重受损的明显迹象.其中任何一个都需要程序员对它做些什么.抛出异常只会在没有被捕获时才能正常运行.如果它被捕获,你会丢失非常重要的诊断信息,它会抛弃所有重要的调用堆栈,帮助您了解它是如何进入该状态的.如果没有捕获,那么C异常和硬件异常之间没有明显的区别.

异常可能在某处被捕获的风险要求您不要抛出异常并让它死掉.

对于在捕获异常后可以生成调用堆栈的运行时环境,这种考虑是非常不同的.在托管环境中很常见,而不是在本机C/C++中.

总结

以上是内存溢出为你收集整理的c – 抛出(或相应地)NULL函数参数而不是让它全部爆炸?全部内容,希望文章能够帮你解决c – 抛出(或相应地)NULL函数参数而不是让它全部爆炸?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1237530.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存