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_的对象就是被释放还仍然使用的对象.

  • 相关阅读:
    [动图演示]Redis 持久化 RDB/AOF 详解与实践
    挑战10个最难的Java面试题(附答案)【上】
    Python使用psutil模块,做你的电脑管家
    在线工具 正则表达式
    [USACO09JAN]Earthquake Damage
    [USACO09MAR]Moon Mooing
    [HNOI2005]汤姆的游戏
    [SDOI2010]大陆争霸
    [USACO08NOV]Cheering up the Cow
    [USACO08NOV]lites
  • 原文地址:https://www.cnblogs.com/duzhaoquan/p/8609715.html
Copyright © 2011-2022 走看看