返回地址是否确保非NULL返回值?

时间:2014-09-30 10:07:42

标签: c++ c return return-type

在函数中,如果我返回一些原始类型的对象的地址。我可以放心,它永远不会是NULL值吗?

我是否需要使用

之类的语句检查NULL
if (r_value) { //do something }  
else { //ERROR }  

3 个答案:

答案 0 :(得分:7)

对象的地址永远不会为空。

小心你没有返回指向非静态局部变量的指针。当函数返回时,它将被销毁,因此指针将无效;但它不会为空,也没有办法告诉它不再有效。

在C ++中,我会返回一个引用而不是一个指针,以明确它不会为null。那当然不是C的选择;我不知道您要问的两种标记语言中的哪一种。

答案 1 :(得分:4)

保证现有对象的地址不为NULL。因此,如果您使用这样的地址,则无需进行NULL检查。

答案 2 :(得分:1)

对象的地址永远不能为空。 因此,您无需检查返回的值是否为NULL。

但请确保您返回的是这样一个变量的地址,当被调用函数返回时,该地址不会超出范围。

我的意思是如果你返回任何已经在堆栈上有内存的对象的地址,在从函数返回后,它的堆栈帧将被弹出,因此返回的地址将不再指向所需/有效的位置。这可能会导致程序运行时出现错误。

因此,请确保您没有返回非静态局部变量或具有寄存器存储类的变量的地址。

如果你没有维护被调用的函数,并且将来有可能改变它,那么作为一般编码实践并避免将来的hastles,你可以检查返回值是否为NULL,否则无需检查根据我的返回值对NULL。