我有一个程序有时会因指针运算而出现段错误。我知道会发生这种情况,但我不能轻易地提前检查它是否会出现段错误——要么我可以“预扫描”输入数据以查看它是否会导致段错误(这可能无法确定),或者我可以将其 retrofit 为不使用指针算法,这需要大量工作,或者我可以 try catch 段错误。所以我的问题:
1) 在 C 语言中,我如何捕获段错误?我知道操作系统中的某些东西会导致段错误,但是如果 C 程序发生段错误比段错误
更优雅地死去,它能做什么?
2) 这有多便携?
我想这是一种非常不可移植的行为,所以如果您发布任何代码来捕获段错误,请告诉我它的工作原理。我在 Mac OS X 上,但我希望我的程序能够在尽可能多的平台上运行,我想看看我的选择是什么。
别担心 - 基本上我想做的就是打印一条对用户更友好的错误消息并释放一些 malloc()
ed 内存,然后死掉。我不打算忽略我遇到的所有段错误并继续努力。
最佳答案
好吧,SIGSEGV 是可捕获的,而这是 POSIX,因此在这个意义上它是可移植的。
但是我担心您似乎想要处理段错误而不是修复导致段错误的问题。如果我必须选择是操作系统有问题还是我自己的代码,我知道我会选择哪个。我建议您找到那个错误,修复它,然后编写一个测试用例以确保它不会再困扰您。
关于在 C 中捕获段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554138/