在Linux / GCC下将NULL指针访问转换为C异常
有没有办法在
Linux下将NULL指针访问转换为C异常?类似于Java中的NullPointerException.我希望以下程序能够成功返回,而不是崩溃(假设编译器在编译期间无法找出此NULL指针访问):
class NullPointerException {}; void accessNullPointer(char* ptr) { *ptr = 0; } int main() { try { accessNullPointer(0); } catch (NullPointerException&) { return 1; } return 0; } 我不期望任何标准的方法,因为C下的NULL指针访问是未定义的行为,只是想知道如何在x86_64 Linux / GCC下完成它. 我做了一些非常原始的研究,有可能: >在Linux下访问NULL指针时,将生成SIGSEGV. 以下是GCC手册页的引用(-fnon-call-exceptions):
看来这个“特定于平台的运行时”正是我想要的.任何人都知道这样的Linux / x86_64运行时?或者如果没有这样的运行时已经存在,请给我一些关于如何实现这样的运行时的信息? 我希望该解决方案也适用于多线程程序. 解决方法
不,没有好办法,而且不应该这样做.源代码中的throw语句抛出异常.这对于推理异常安全非常重要:您可以查看代码并查看可以抛出异常的位置,或许更重要的是,您可以查看代码并查看不会抛出异常的位置.如果您做的任何事情都可以抛出异常,那么编写异常安全的代码变得非常困难,而不会使用catch子句使其混乱.微软在早期的C编译器中尝试了这一点:他们在操作系统的结构化异常之上捎带了C异常处理,结果是一场灾难.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |