zoukankan      html  css  js  c++  java
  • 如何检测野指针

        野指针又叫悬挂指针(Dangling Pointer)就是当指针指向的对象已经释放或回收后,但没有对指针做任何修改(一般来说,将它指向空指针),而是仍然指向原来已经回收的地址。如果指针指向的对象已经释放,但仍然使用,那么就会导致程序crash。

       一般来说,出现EXC_BAD_ACCESS错误的原因都是悬挂指针导致的,但具体是哪个指针是悬挂指针还不确定,因为控制台并没有给出具体crash信息。

    要想得到更多的crash信息,你需要启动NSZombieEnabled。具体步骤如下:

    1.选中Edit Scheme,并点击:

    2.Run -> Diagnostics -> Enable Zombie Objects:

    3设置完之后,再次运行和点击悬挂指针,虽然会再次crash,但这次控制台打印了以下有用信息:

    信息message sent to deallocated instance 0x7fe19b081760大意是向一个已释放对象发送信息,也就是已释放对象还调用某个方法。现在我们大概知道什么原因导致程序会crash,但是具体哪个对象被释放还仍然使用呢?

     点击继续运行

    留意上面的两个红色框,它们两个地址是一样,而且PollingWebViewController前面有个_NSZombie_修饰符,说明dataSource对象被释放还仍然使用。

    找到前边带_NSZombie_的对象就是被释放还仍然使用的对象.

  • 相关阅读:
    Object有哪些公用方法?(转)
    equals和==的区别(转)
    switch语句中case的标签
    (常见面试问题)九种基本数据类型的大小,以及他们的封装类
    English
    plot
    文件读写
    标准化
    独热编码
    一阶逻辑
  • 原文地址:https://www.cnblogs.com/duzhaoquan/p/8609715.html
Copyright © 2011-2022 走看看