objective-c问题exc_bad_access报错

作者&投稿:姓祥 (若有异议请与网页底部的电邮联系)
xcode编程c语言,遇到问题exc bad access 网上说是什么内存释放的问题,但是~

打开NSZombieEnabled来调试EXC_BAD_ACCESS
在写iOS程序时,无论你是新手还是牛人,都有可能会碰到EXC_BAD_ACCESS。而此时你的debug area中不会显示任何信息可以来帮助你找出问题。此时就需要打开NSZombieEnabled来提供更多有用的信息。
在XCode 4.2中,有两种方法来打开NSZombie。
方法一,添加环境变量, 在菜单中,选择Product->Edit Schema, 选择Run (App Name), 在Arguments下面的Environment Variables中,添加NSZombieEnabled, Value值为YES。
方法二,打开Diagnostics, 同样在菜单中选择Product -> Edit Schema, 选择Run (App Name), 在Diagnostics下,打开Memory Management下的Enable Zombie Objects.
此时,在运行程序,就会显示哪个instance已经被release了,而你还向这个对象发消息。

当问题解决后,要将NSZombieEnabled设置为无效,不需要删除变量,将变量前的对号去掉就可以了



以下为转载内容 原文地址:http://www.cnblogs.com/shenyunjun420/archive/2011/08/04/2127464.html

第一次遇到 EXC_BAD_ACCESS , 然后程序崩溃,没有任何调试信息
上网一查是这样解释的
向已经释放的对象发送消息时会出现EXC_BAD_ACCESS。当出现错误时,通常会调用堆栈信息,特别是在多线程的情况下。
其实就是使用了野指针.

于是,我就按照教程(http://www.codza.com/how-to-debug-exc_bad_access-on-iphone) 在Xcode中打开executables
然后,打开信息面板中的Arguments面板
然后添加参数 NSZombiEnabled=YES, 这个参数值可以让GDB在发现使用已经释放的对象时给出一个有用信息
(Zombie 想起了植物大战僵尸....)

再次运行,GDB给出了出错消息 2011-01-11 01:00:00.299 VDic[342:20b] *** -[FMResultSet release]: message sent to deallocated instance 0x3d30f70
至此,我知道了是FMResultSet 释放过度
但是是哪个地方释放过度却不甚清楚

于是把 objc_exception_throw 和 -[NSException raise] 加入了断点列表
再次运行,发现错误定位到main函数...汗...这个还是太不精确了

为什么main函数是错误位置呢? 我突然想到了main 函数里有个内存池来维护使用自动回收机制的对象
那么错误定位到main 可能就是这个位置出了问题
int main(int argc, char *argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
}

进一步的回忆Fundation 框架的内存管理机制, 我很显然是在某个地方release了本来应该自动回收的FMResultSet对象
这样我就能够定位一些位置了, 查找了下, 果然....

+ (NSMutableArray *) select: (NSString *) sql;
{
NSMutableArray *arr = [[NSMutableArray alloc] init];
FMResultSet *rs = [db executeQuery:sql];
while ([rs next]) {
[arr addObject:[rs resultDict]];
}

[rs close];
[rs release];
return arr;
}

rs是其它对象函数返回的结果,初始时引用计数为1,并被投入到自动释放池中
而我画蛇添足的release 则是一切灾难的根源,阿门
去调此句果然运行通过了.

请大声朗读以下 Cocoa Fundation内存释放原则

1. 通过分配或复制创建的对象保持计数1
2. 假设任何别的方法获取的对象保持计数1,而且在自动释放池中. 要想在当前执行范围外使用该对象,就必须保持它
3. 向集合添加对象时它就被保持,从集合移除对象时就被释放.释放集合对象会释放该集合中的所有对象
4. 确保有多少alloc,copy,mutableCopy或retain消息就有多少release或autorelease消息发送给该对象. 换句话说,确保你的代码平衡
5. 在访问方法设置属性,先保持,再释放 (ztime: 现在有@propperty , @synthesize 两个指令自动创建此代码)
6. 用@"..."结构创建的NSString对象是常量.发送release或retain并无效果

总体而言,Cocoa Fundation的内存管理还是非常简单清晰的,
MS的COM对象生存期管理一样是智能指针:)
对象释放后通常要把指针设为nil

这段代码我运行了没问题,可能是“/tem/words.txt”这个文件不存在,或者是文件名或路径名写错了。这段代码的意思就是打开/tem目录下的words.txt文件,并逐行读取其中的字符串,将字符串和其长度打印出来。

教你个调试这类的问题的方法:进到断点界面。。点左下角加号,然后把All exception加进去。然后再调试就知道哪出问题了。



晕。为什么代码拷过去,我能点击弹回多次。就是rightButton的事件没写,点击报错。EXC_BAD_ACCESS这种错误,一般来说应该是要访问的东西的内存被释放了。你自己试试用系统自带的内存分析工具看看,我这边抓图累。你先44

很有可能是selector send to dealloc instance,但具体是什么原因还得调试一下,搜索一下exc_bad_access的调试方法,在xcode中进行相应的设置调试
LHJVC21*VC21 = [[LHJVC21 alloc] initWithNibName:nil bundle:nil];
修改为LHJVC21*VC21 = [[LHJVC21 alloc] init];


objective 和goal 有什么区别?
objective和goal的区别:一、指代不同 1、objective:目标,目的。2、goal:球门,射门。二、用法不同 1、objective:objective用作形容词的意思是“客观的,不带偏见的”,指以纯客观的眼光去观察事物或现象,不掺杂个人的情感与偏见。2、goal:goal的基本意思是“球门,进球得的分”,引申为“目标”,...

objective,object是什么意思?
objective:一、意思:adj. 客观的;真实的;宾语的 n. 目标;目的;[物]物镜;[语]宾语 二、发音:英 [əb'dʒektɪv] , 美 [əb'dʒektɪv]三、例句 From any objective perspective,it is simply too long.从客观的角度来讲,这实在是太长了。object...

objective是什么意思
Objective的核心含义在于设定明确且具有实际意义的目标,无论是在哪个领域,如项目管理。它是项目的核心驱动力,代表着项目想要实现的具体成果或期望达到的状态。在项目规划中,objective必须是具体的、可度量的,以便于在执行过程中进行跟踪和评估,确保它们与项目愿景相一致,且既具有挑战性又符合实际可行性...

objective是什么意思?
objective可作形容词。作名词时,object倾向于指具体的“物件”,objective指目的、目标。object的基本意思是“物体”,指可见到或可触摸到的实物。object也可作“对象”“客体”解,指行为、感觉或思想所及的人或事物,常与介词of搭配使用。反义词 agree 英[əˈɡriː]美[ə&...

subjective和objective区别
subjective和objective的区别:中文意思不同、词性不同、用法不同。subjective作为形容词,含义为主观的、主语的、主格的;objective可作名词和形容词,作名词时,含义为目标、目的,作形容词时,含义为就事论事的、宾格的。一、subjective的中文意思及用法介绍 subjective作为形容词,含义为主观的(非客观的)...

aim、 goal、 objective、 target的区别是什么?
aim,goal,objective,target 这四个词的区别是:意思相同、用法不同、侧重点不同 一、意思不同 1、aim的意思是:目的;目标;瞄准;力求达到;力争做到;旨在;瞄准;对准 例句:She set out the company's aims and objectives in her speech.她在讲话中提出了公司的各项目标。2、goal的意思是:...

objective怎么读
objective的读音是:英音[əbˈdʒektɪv]、美音[əbˈdʒɛktɪv]。1、objective基本解释 adj.客观的,实体的;目标的;[语]宾格的;[医]他觉的 n.目标,任务;[光]物镜;[语]宾语,宾格;[事]出击目标 2、objective用法和例句 While...

object和objective有什么区别,怎么用?
二、objective的详细释义 n. 目标;目的;【光学】(望远镜、显微镜、照相机及其他光学仪器上的)物镜;【语法】宾语;宾格;宾格词 adj.客观的;就事论事的;【哲】客观存在的;某于事实的;【语法】宾格词形变化 三、知识点拓展:其他表示目标的单词:1、aim从本义“靶子”引申而来,侧重比较具体而明确的目标...

subjective和objective区别
Subjective和Objective的区别 人们常常听到“subjective”和“objective”这两个用于描述观点或判断的词。在不同领域,这两个词都有自己特定的定义和用途。本文将从不同角度探讨subjective和objective的区别。1. 定义 1.1 subjective 在哲学、心理学和社会科学领域里,subjective指的是个人主观体验、想法和感觉...

单词objective和object的区别
1、音标不同 objective 英[əbˈdʒektɪv];美[əbˈdʒɛktɪv]object 英[ˈɒbdʒɪkt];美[ˈɑ:bdʒekt]2、词性不同 objective既可以是名词,语义,n 目标;也是形容词,adj 客观的;object只做名词,...

怀宁县19367695206: objective - c问题exc - bad - access报错 -
肥南消肿: 晕.为什么代码拷过去,我能点击弹回多次.就是rightButton的事件没写,点击报错.EXC_BAD_ACCESS这种错误,一般来说应该是要访问的东西的内存被释放了.你自己试试用系统自带的内存分析工具看看,我这边抓图累.你先44

怀宁县19367695206: 什么时候会发生exc bad access异常 -
肥南消肿: 原因一般就是:调用了已经释放的内存空间,或者说重复释放了某个地址空间.而怎样定位到这个地址呢,可以通过编辑xcode的scheme,添加如下标记位,让系统把错误地址打印出来,如图:(通过Product->Scheme->Edit Scheme进入下面...

怀宁县19367695206: objective - c 访问上级目录报错 expected identifier or ( -
肥南消肿: 首先,这段代码是定义枚举变量,并不是在访问什么东西.另外,现在的问题是xcode根本无法正确解析这个.h文件.你把这个ARDroneGeneratedTypes.h发出来看看吧.(不过,从名字看,这个文件像是自动生成出来的?)

怀宁县19367695206: Objective - c 归档问题
肥南消肿: 关于Archiver那两个类不太熟悉,这个直接读帮助文档就可以了.想说一下下面的两句:Encode* temp2 = [[Encode alloc] init]; temp2 = [NSKeyedUnarchiver unarchiveObjectWithData:data];你给temp2分配了了空间并初始化,但没有用它,然后马上又给它赋值.那它原来分配的空间会有内存泄露,无法被释放了.这个问题只会造成内存泄露,理论上来说,不会引起你的那个访问错误内存的问题.

怀宁县19367695206: Objective c简单问题 -
肥南消肿: 在xib文件拖动控件的时候注意叠放次序就可以了,将uibutton放在uiimageview的前面,不...

怀宁县19367695206: 关于objective - c程序的一个小问题 -
肥南消肿: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *FibCellIdentifier = @"FibCellIdentifier"; UITableViewCell *cell = (UITableViewCell *)[tableView ...

怀宁县19367695206: object - c的优点及缺点 -
肥南消肿: Objective-C是非常“实际”的语言.它使用一个用C写成、很小的运行库,只会令应用程序的大小增加很小,和大部分OO系统使用极大的VM执行时间会取代了整个系统的运作相反,ObjC写成的程序通常不会比其原始码大很多.而其库函数(通...

怀宁县19367695206: objective - c报错expected identifier,请帮忙看下,谢谢! -
肥南消肿: reloadName后面:缺东西

怀宁县19367695206: objective - c什么意思 -
肥南消肿: Objective-C Objective-C,通常写作ObjC或OC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.它主要使用于Mac OS X和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言. GCC与...

怀宁县19367695206: 关于Objective - C的一个小问题,求哥哥姐姐们帮忙,谢谢了,
肥南消肿: 可以这么考虑!一般来说,window是不直接操作的,你还要在window里加一个UIView 然后,在这个UIView里再加上你的小控件. 比如在self.window.backgroundColor=[UIColorwhiteColor]; 这一行后面,新加一个UIView, 可以这样写: UIView...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网