美文网首页
野指针与空指针

野指针与空指针

作者: 54番茄 | 来源:发表于2018-03-28 14:54 被阅读5次

    空指针

    • 没有存储任何内存地址的指针就称为空指针(NULL指针)

    • 空指针就是被赋值为0的指针,在没有被具体初始化之前,其值为0。
      例如:

    Person * p1 = NULL;
    
    Person * p2 = nil;
    

    野指针

    “野指针”不是NULL指针,是指向"垃圾"内存(不可用内存)的指针。人们一般不会错用NULL指针,因为用if语句很容易判断。但是“野指针”是很危险的,if语句对它不起作用。
    野指针的形成:

    Person * p1 = [Person alloc]init];
    p.name = @"张三";
    //给p指向的Person对象发送一条release消息。在这里,Person对象接收到release消息后,会马上被销毁,所占用的内存会被回收。
    [p  release]
    //这里Person对象被销毁了,内存就变成了"垃圾内存",这时候,p就称为了野指针,如果在去对p操作,那就会报野指针错误
    p.age  =10;
    
    //正确方式
    p = nil;
    

    总结:

    1. 利用野指针发消息是很危险的,会报错。也就是说,如果一个对象已经被回收了,就不要再去操作它,不要再尝试给它发消息。

    2. 利用空指针发消息是没有任何问题的,也就是说 p = nil 后在去 p.age = 10 是没有错误的,如果在操作销毁内存时,一定要记得把指针内存储的内存地址滞空nill。

    相关文章

      网友评论

          本文标题:野指针与空指针

          本文链接:https://www.haomeiwen.com/subject/dlnycftx.html