在Objective-C中取消引用未初始化的指针

时间:2013-10-02 18:47:26

标签: objective-c

此代码http://ideone.com/stD7VU

中发生了什么

首先,我认为我正在使用int作为指针,编译器不会警告我。然后第二个块我无法理解当我没有使用a时如何解除引用new。发生了什么?我不知道obj-​​c。

#import <stdio.h>

@implementation TestObj
int main()
{
    {
        int *a;
        a=5;
        printf("%d\n", a);
    }
    {
        int *a;
        *a=7;
        printf("%d\n", *a);
    }
    return 0;
}
@end

1 个答案:

答案 0 :(得分:4)

  

首先,我认为我可以使用int作为指针,编译器不会警告我。

实际上确实如此。在第一个块中,行

a=5;

会引发编译器警告,特别是

  

不兼容的整数到指针转换分配&#39; int *&#39;来自&#39; int&#39;。


  

当我没有使用新的

时,我无法理解如何取消引用

您正尝试取消引用未初始化的指针。这是C中未定义的行为(而Objective-C是C的超集,因此它也在其中),所以你的程序可以在技术上打印Dante的整个Divine Comedy并且仍然符合规范。

顺便说一句,你不需要任何特殊的C结构来初始化指针。 Objective-C是C的适当子集,因此您可以使用malloc

如果是对象,则有一整套专用于对象分配和释放的API,包括new