`
hotfm
  • 浏览: 51081 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

解决 EXC_BAD_ACCESS 错误

阅读更多

出现 EXC_BAD_ACCESS  错误,给你的错误提示就这个,如何根本没法知道哪里错误了,其实还是有方法知道的,

做如下设置:

Project -> Edit active executable ->Argument 

添加如下四个参数

NSDebugEnabled

NSZombieEnabled

MallocStackLogging 

MallocStackLoggingNoCompact

并都设置为YES。具体如下图:

 

  这个时候,如果有如下一段代码:

 //重复释放一个变量 

  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

  NSData* data = [NSData dataWithBytes:"asklaskdxjgr" length:12];

  [data release];

  [pool release];

再Debug窗口会有如下的提示

   2003-03-18 13:01:38.644 autoreleasebug[3939*** *** Selector 'release'

  sent to dealloced instance 0xa4e10 of class NSConcreteData.

 

虽然也能大致判断是哪种类型的变量重复释放了,但信息还不够多,当项目大,源码比较多的时候,也不太方便定位,

在console窗口运行如下命令可以得到更多信息:shell malloc_history <pid> <address>"

 输入命令:shell malloc_history 3939 0xa4e10

 就会出现更多的信息:

  [dave@host193 Frameworks]$ malloc_history 3939 0xa4e10

  Call [2] [arg=32]: thread_a0000dec |0x1000 | start | _start | main |

  +[NSData dataWithBytes:length:] | NSAllocateObject | object_getIndexedIvars |

  malloc_zone_calloc  

这个时候就知道具体哪个函数出先问题了,从这里可以看到main里NSData出现问题了。 

 

2. NSArray等集合类的实用问题。

      如下面的代码    

        ReleaseTest* rt = [[allocinit];

NSMutableArray *array = [[NSMutableArray allocinit] ;

[array addObject: rt];

ReleaseTest *rt2 = [array objectAtIndex:0];

      [rt2 release];   

[array release];

[rt release]; 

     就会导致重复释放内存问题,因为rt2,获取的是一个对象的指针,如果已经释放了的话,rt在释放的话,就重复了,为了遵循谁Init谁Release的原则,rt2就不应该Release。

 

3. init 和 Release 的问题。

    凡是对象通过Init的方法生成的对象,都需要自己负责Release。

    凡不是通过Init的方法生成的对象,不需要负责Release.如[NSString StringWithFormat]方法生成的对象就不需要自己Release,因此自己定义函数,返回一个类的时候,一定要设置为autoRelease 。这样调用的人就不用操心是否需要释放对象了。

 4. AutoReleasePool里最好不要将AutoRelease对象赋值给其它对象,否则离开这个作用域后,对象将会Release掉。

分享到:
评论

相关推荐

    ios EXC_BAD_ACCESS错误调试

    在ios开发过程中经常出现EXC_BAD_ACCESS错误而导致程序崩溃,这里将介绍如何利用XCode和Instrument来查找错误发生的地方,从而更好的定位

    查找EXC_BAD_ACCESS的错误代码处

    详细介绍了通过Instrument工具,可视化的定位EXC_BAD_ACCESS 错误的位置。是本人自己实践总结出来,绝对好用。

    查找 EXC_BAD_ACCESS 问题根源的方法

    查找 EXC_BAD_ACCESS 问题根源的方法

    关于出现僵尸信号SIGBAT或者EXC_BAD_ACCESS的解决方案

    NULL 博文链接:https://bengan.iteye.com/blog/1471440

    iOS内存错误EXC_BAD_ACCESS的解决方法

    iOS开发,最郁闷的莫过于程序毫无征兆地就崩溃了,用bt命令打出调用栈,给出的是一堆系统EXC_BAD_ACCESS的信息,根本没办法定位问题出现在哪里

    ios-GPUImageFiltersCamera.zip

    出现EXC_BAD_ACCESS。 需要修改Product-&gt;Scheme-&gt;Edit Scheme-&gt;Options-&gt;GPU Frame Capture 选择 Disabled。 功能介绍 模仿Filckr的照相功能实现了: 1.实时滤镜 2.相机基本功能:拍照,对焦,前后...

    CGImageIssueDemo:核心图形问题测试

    CGImageIssueDemo 核心图形问题测试 做什么的 似乎对于iOS 11.2 +, CoreGraphics.framework发生了奇怪的... 这导致EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000 。 重现步骤 使用CGDataProviderCreateDi

    GPUImageFiltersCamera相机

    出现EXC_BAD_ACCESS。 需要修改Product-&gt;Scheme-&gt;Edit Scheme-&gt;Options-&gt;GPU Frame Capture 选择 Disabled。 功能介绍 模仿Filckr的照相功能实现了: 1.实时滤镜 2.相机基本功能:拍照,对焦,前后摄像头转换...

    iOS-interview-preparation:iOS开发人员面试准备指南

    在什么情况下应用会因EXC_BAD_ACCESS错误而崩溃? 推荐阅读: 自动版面 多任务-GCD,NSOperations等 设计模式-委派,单例,块等 积木 什么是区块?何时在您的应用中使用它们? 块如何使在块外部声明的变量发生...

    杜蕾斯安全工具

    //EXC_BAD_ACCESS,非ARC正常 } returnnil; } 在几个项目种试了下,没发现啥问题,想用的尽管拿去用,另外非常欢迎参与完善,目前仅替换了几个类,还有很多需要替换的,请在github中关注,工具包以增量的形式,...

    BURNINTEST--硬件检测工具

    - BurnInTest could have crashed on accessing bad video memory hardware in the 2D test. This problem is now just reported as an error (and BurnInTest) continues. - When BurnInTest crashes, it should...

Global site tag (gtag.js) - Google Analytics