main.m中的EXC_BAD_ACCESS

问题描述

| 突然我在这条线上得到了EXC_BAD_ACCESS:
int retVal = UIApplicationMain(argc,argv,nil,nil);
这是代码
int main(int argc,char *argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc,nil);
    [pool release];
    return retVal;
}
我什至不知道从哪里开始寻找? 谁能帮忙吗?     

解决方法

        对于任何EXC_BAD_ACCESS错误,您通常尝试将消息发送到已发布的对象。追踪这些问题的最佳方法是使用NSZombieEnabled。 通过从不实际释放对象,而是将其包装为“僵尸”并在其中设置一个标志来表示该对象通常会被释放,从而起作用。这样,如果您尝试再次访问它,它仍然会在发生错误之前知道它是什么,并且借助少量信息,通常可以回溯以查看问题所在。 当调试器有时会发掘任何有用的信息时,它特别有助于后台线程。 但是,非常重要的一点是,您需要100%确保这仅在调试代码中,而不在分发代码中。因为什么都不会发布,所以您的应用程序将泄漏,泄漏和泄漏。为了提醒我执行此操作,我将此日志放在我的appdelegate中:
if(getenv(\"NSZombieEnabled\") || getenv(\"NSAutoreleaseFreedObjectCheckEnabled\"))
  NSLog(@\"NSZombieEnabled/NSAutoreleaseFreedObjectCheckEnabled enabled!\");
    ,        EXC_BAD_ACCESS是一个信号,指示您正在尝试访问已释放的内存或不存在的内存中的变量。由于它会在释放自动释放池之后显示,这意味着您可能过度释放了带有挂起的自动释放的变量,因此该变量在释放自动释放池时不再存在以释放。 有很多现有的问题可以解决这个问题,其中最重要的就是这个问题。     ,        EXC_BAD_ACCESS通常表示您的内存已释放过多。您可以在Xcode中使用\“ Build And Analyze \”命令来帮助跟踪。我还建议在整个代码中放置断点和日志记录语句,以隔离该错误。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...