【发布时间】:2012-02-17 21:43:14
【问题描述】:
我们有一段用 C 编写的代码,有时不能很好地处理零指针。
代码最初是在 Solaris 上编写的,这样的指针会导致分段错误。不理想,但比继续耕作要好。
我们的经验是,如果您在 AIX 上读取空指针,您将得到 0。如果您使用 xlc 编译器,您可以添加一个选项 -qcheck=all 来捕获这些指针。但我们使用 gcc(并希望继续使用该编译器)。 gcc 是否提供这样的选项?
【问题讨论】:
-
“不能很好地处理零指针”是什么意思?
-
我个人认为所有对 NULL 的引用(技术上是
0)都是错误,并且会添加代码来检查它,而不是相信编译器会为我做这件事。特别是因为编译器不知道如果有NULL指针我想做什么?有时可以跳过访问指针的代码,有时这是需要中止程序的致命错误。 -
AFAIK 取消引用 NULL 指针会导致未定义的行为。
-
您需要修复您的代码,不要再假装问题可以通过其他方式解决。不要取消引用空指针。故事结束。
-
为什么这么多回复责骂 OP 修复他的代码?我读到的问题是询问是否可以说服编译器帮助检测错误,而不是要求编译器“修复”或隐藏问题(陷阱并不能完全隐藏问题)。