指针本身并不能告诉我们它是否有效,所以,不能只靠检查指针的内容来判断它是否有效。不过,有三种方法可以用来处理未初始化的指针:
- 总是用
NULL
来初始化指针; - 用
assert
函数; - 用第三方工具。
把指针初始化为NULL
更容易检查是否使用正确。即便这样,检查空值也比较麻烦,如下所示:
int *pi = NULL;
...
if(pi == NULL) {
// 不应该解引pi
} else {
// 可以使用pi
}
我们可以用assert
函数来测试指针是否为空值。下例测试了pi
变量是否为空值。如果表达式为真,那么什么都不会发生,如果表达式为假,程序会终止。这样,指针为空的话程序就会终止。
assert(pi != NULL);
对于应用程序的调试版本,这种方法可能可以接受。如果指针是空值,输出类似下面:
Assertion failed: pi != NULL
我们在assert.h头文件中声明assert
函数。
可使用第三方工具来帮助定位这类问题,此外,有些编译器选项也比较有用。