检查空指针

时间:2010-10-23 16:31:50

标签: c++ pointers null

我正在构建一个iphone应用程序并使用c ++并且无法检查指针是否为空。

IMyInterface* myInterface;

if ( !myInterface ){                         //doesn't work
     myInterfacee->doSometing(); 
}

if ( myInterface != 0 ) {                    //doesn't work 
     myInterfacee->doSometing(); 
}

if ( myInterface != NULL ){                  //doesn't work
     myInterfacee->doSometing(); 
}

if ( myInterface != ( myInterface* )0 ) {    //doesn't work 
     myInterfacee->doSometing(); 
}

如果myInterface设置或未设置,它仍会进入每个语句并给我

编程接收信号:“EXC_BAD_ACCESS”。

如何检查myInterface是否为空

3 个答案:

答案 0 :(得分:17)

您的基本问题是您尚未初始化myInterface

假设myInterfacee只是一个拼写错误,以下内容一切正常,而且没有人会拨打doSometing

IMyInterface* myInterface = 0;

if ( myInterface ){                // ! removed
     myInterface->doSometing(); 
}

if ( myInterface != 0 ) {          // as before
     myInterface->doSometing(); 
}

if ( myInterface != NULL ){        // as before
    myInterface->doSometing(); 
}

if ( myInterface != ( IMyInterface* )0 ) { // IMyInterface, not myInterface
     myInterface->doSometing(); 
}

就个人而言,我更喜欢前三个,而不喜欢第四个,但这是一个风格而不是正确的问题。

  

如果myInterface已设置或未设置   仍然输入每个陈述

我有点不相信这一点,但如果确实如此(你正在初始化myInterface,并且仍然看到if (!myInterface)if (myInterface != 0)条款都被执行了,那么在你的程序的其他地方有一些非常错误。这些测试具有相反的含义,因此它们两者都会显示为真的唯一方法是当未定义的事情发生时。

答案 1 :(得分:6)

您没有初始化myInterface,因此其值不确定。您需要将其初始化为null:

IMyInterface* myInterface = 0;

或者,如果可以的话,通常最好在声明变量时将变量初始化为有效状态:

IMyInterface* myInterface = new TypeImplementingInterface();

您还应该考虑使用某种类型的智能指针,例如shared_ptr;智能指针使C ++中的内存管理变得更加简单。

答案 2 :(得分:4)

您的问题是默认情况下指针不会自动初始化为NULL。你在那里的所有方法都应该有效,但是你需要在定义时将变量初始化为NULL。

相关问题