在 C 中捕获段错误

标签 c macos error-handling segmentation-fault

我有一个程序有时会因指针运算而出现段错误。我知道会发生这种情况,但我不能轻易地提前检查它是否会出现段错误——要么我可以“预扫描”输入数据以查看它是否会导致段错误(这可能无法确定),或者我可以将其 retrofit 为不使用指针算法,这需要大量工作,或者我可以 try catch 段错误。所以我的问题:

1) 在 C 语言中,我如何捕获段错误?我知道操作系统中的某些东西会导致段错误,但是如果 C 程序发生段错误比段错误更优雅地死去,它能做什么?

2) 这有多便携?

我想这是一种非常不可移植的行为,所以如果您发布任何代码来捕获段错误,请告诉我它的工作原理。我在 Mac OS X 上,但我希望我的程序能够在尽可能多的平台上运行,我想看看我的选择是什么。

别担心 - 基本上我想做的就是打印一条对用户更友好的错误消息并释放一些 malloc()ed 内存,然后死掉。我不打算忽略我遇到的所有段错误并继续努力。

最佳答案

好吧,SIGSEGV 是可捕获的,而这是 POSIX,因此在这个意义上它是可移植的。

但是我担心您似乎想要处理段错误而不是修复导致段错误的问题。如果我必须选择是操作系统有问题还是我自己的代码,我知道我会选择哪个。我建议您找到那个错误,修复它,然后编写一个测试用例以确保它不会再困扰您。

关于在 C 中捕获段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554138/

相关文章:

c - 即使数组编号匹配,它仍然返回 false

c - 如何初始化 LCD 的 4 位操作

c# - 如何在按回车键后使用 MonoMac 在 NSTextField 中插入回车符?

json - 如何读取折叠的 UTF-8 字符串

c# - C# 中的 IErrorInfo

c - 如何描述可由序列图中的预处理器禁用或启用的序列图消息

c - 为什么 C 比 Go 或 D 更快地构建小程序?

macos - 您可以动态地将 CFBundleDocumentTypes 分配给您的 Cocoa 应用程序吗?

mysql - 尝试处理数据库登录表单中的错误时结果不同

javascript - Express JS 响应后的错误处理