我正在构建一个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是否为空
答案 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。