首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EXC_BAD_ACCESS错误

EXC_BAD_ACCESS错误
EN

Stack Overflow用户
提问于 2009-02-25 23:43:09
回答 3查看 8.6K关注 0票数 2

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

我用仪器检查配给和漏水情况。一点也不漏水。内存监视器显示一致的5.2MB。Objectalloc图是稳定的,对象的净字节是arouend 480000,#net大约是6400。

大约10 ~ 15小时后坠毁。所以我在malloc_error_break中添加了断点。现在我在调试器控制台上得到了大约12个小时后的"EXC_BAD_ACCESS“错误。

有什么想法吗?

一个可疑的部分是发送数据。

代码语言:javascript
复制
- (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];
}


Another suspicious part is READING data:

- (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];
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-26 00:16:46

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

UPDATE:上面的说明用于Xcode 3。在Xcode 4中,单击工具栏中的方案名称,选择“编辑方案”,单击工作表的源列表中的"Run“,选择”诊断“选项卡,并检查”启用保护Malloc“。

票数 9
EN

Stack Overflow用户

发布于 2009-02-26 00:12:06

如果您得到了EXC_BAD_ACCESS,那么您可能还会得到一个崩溃日志,这将帮助您确定崩溃的位置。可能取消引用一个指向内存的指针,而这个指针不起作用--例如,不清楚aStringurl变量来自何处。也不清楚你的应用程序是否有多个线程,在这种情况下,你的本地NSAutoreleasePool可能会发布你不希望它发布的东西,这一切都很难分辨。

票数 1
EN

Stack Overflow用户

发布于 2011-12-29 23:04:10

使用僵尸仪器对其进行分析也会有所帮助,因为它提供了详细的反馈,说明是什么导致了错误。例如,已分配的数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/588445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档