2010-06-03 64 views
0

我一直在使用这个代码创建一个UIWindow我跟踪EXC_BAD_ACCESS在iPad上

UIMyWindow* win = [[UIMyWindow alloc] 
        initWithFrame:[[UIScreen mainScreen] applicationFrame]]; 

UIMyWindow没有什么特别的,它只是有一个指针指向一个C++的类,它的ObjectiveC的一些包装。

最近我的应用程序在添加一些代码行后就开始崩溃了,这些代码行并没有对错误做任何事情。我添加的代码行只是分配一个C++对象,但程序执行永远不会到达这一行。

有趣的是我的代码在Release中有效。

我唯一的猜测是我在一个完全不同的地方做了一些内存损坏。我的问题是: 什么类型的内存损坏可以是? 是否有一些良好的做法来追踪他们?

回答

1

您肯定有一条消息发送到释放对象。

你应该试着用Instruments.app来调试你的程序。它应该告诉你潜在的记忆问题。

也看看NSZombieEnabled环境变量。基本上,它会在释放对象的位置留下一个虚拟对象。当消息发送到该虚拟对象时,您会收到警报,让您可以查看问题的位置。

+0

我刚刚注意到我在日志中有这条消息: 警告:当前语言与此帧不匹配。 NSZombieEnabled没有帮助。我的Instruments.app在我上次更新DevEnv时停止工作,或者因为我一直在iPad上进行测试,所以可能无法工作。我会尝试让我的应用程序在iPhone上运行,如果它不工作我可能会尝试更新DevEnv。 – Aleks 2010-06-03 08:53:06