当前位置:  开发笔记 > 编程语言 > 正文

EXC_BAD_ACCESS错误

如何解决《EXC_BAD_ACCESS错误》经验,为你挑选了1个好方法。

我创建了一个应该运行的应用程序,直到我停止它.它基本上做的是从连接的另一个设备获取一些数据NSURLConnection,并定期使用该数据发送到服务器,并定期从服务器读取数据,并使用图形将该数据可视化NSXMLParser.

我运行仪器来检查分配和泄漏.完全没有泄漏.内存监视器显示一致的5.2 MB.Objectalloc图是稳定的,objectallo的净字节是480000,#net是6400左右.

它在大约10~15小时后坠毁.所以我添加了断点malloc_error_break.现在,EXC_BAD_ACCESS大约12小时后,我在调试器控制台上出现" "错误.

任何的想法?

一个可疑的部分是SENDING数据.

- (void) sendDataToServerWithX:(float)x Y:(float)y{ 
NSAutoreleasePool *uiUpdatePool = [[NSAutoreleasePool alloc] init]; 
NSString *urlString = [[NSString alloc] initWithFormat:@"http://www.url.com/save_data.php?user=user1&x=%f&y=%f", x, y];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) { NSLog(@"sending success"); } //else { }

NSLog( @"data sent.");
[urlString release];
[theConnection release]; [uiUpdatePool drain]; }

另一个可疑部分是阅读数据:

- (void) readCurrentDataFromServer: (NSTimer *) timer {
NSAutoreleasePool *uiUpdatePool = [[NSAutoreleasePool alloc] init]; XMLParser *parser = [[XMLParser alloc] initXMLParser];
NSURL *url = [[NSURL alloc] initWithString:aString]; NSXMLParser *readXmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[readXmlParser setDelegate:parser]; [readXmlParser parse];

(...)

[parser release];
[url release];
[readXmlParser release]; [uiUpdatePool drain]; }



1> Brent Royal-..:

尝试在iPhone模拟器中运行它,并启用"Guard Malloc"(在Xcode的"运行"菜单中).这是一个特殊的设置,旨在使隐藏的内存访问错误导致立即崩溃而不是隐藏一段时间.(这也会使你的应用程序变得非常慢并且消耗的内存比正常情况多得多,这就是为什么它并不总是开启.)不确定它会有所帮助,但它可能会有所帮助.

更新:上述说明适用于Xcode 3.在Xcode 4中,通过单击工具栏中的方案名称,选择"编辑方案",单击工作表源列表中的"运行",选择"诊断"选项卡,打开Guard Malloc,并选中"启用Guard Malloc".

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有