gpt4 book ai didi

c++ - 在用 C++ 编译的 C 库中如何处理运行时错误?

转载 作者:可可西里 更新时间:2023-11-01 14:40:10 26 4
gpt4 key购买 nike

假设我有一个 C 库,我正在使用 Visual Studio 将其链接到 Windows 上的 C++ 程序。这个 C 库是黑盒子。如果此库中发生 fatal error (例如取消引用空值),程序/操作系统将如何处理此运行时错误?我知道在 C++ 中存在空引用异常,因此您可以使用 try/catch 处理此类错误,但由于这是一个 C 库,它不会发出 throw,对吗?那么会发生什么呢?程序将终止,但如果不是 C++ 异常,将通过什么方式终止?

最佳答案

您永远无法“处理”取消引用空指针。一旦这样做,您的程序就不再处于定义明确的状态,并且无法确定地继续。唯一的行动过程是 terminate(),如果您还没有注册 SIGSEGV 处理程序,操作系统会友好地代表您执行此操作。

“错误”这个词有几个可能会造成混淆的含义:一方面,一个无法执行其预期任务的函数可以说是遇到了一个“错误”,它应该发出信号this,要么通过合适的返回值,要么通过抛出异常。这种行为最好称为失败。必须准备一个正确的程序来处理函数可能返回的所有可能方式。另一方面,编程错误只会导致错误甚至格式错误的程序。一个正确的程序绝不能有任何编程错误。

例如,malloc() 可能会失败(如果找不到足够的空间),它会通过返回一个空指针来发出信号,但您的程序会出错如果它在没有检查的情况下取消引用 malloc() 的结果。

您永远无法通过进一步的编程来“捕获”或“处理”编程错误。相反,正确的程序必须正确地预测和处理组件函数的所有失败条件,并且递归地,正确编写的函数必须始终以明确定义的方式返回并适本地发出失败信号。

关于c++ - 在用 C++ 编译的 C 库中如何处理运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8482834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com