2010-12-05 78 views
5

我是新手在这里。我试图建立一个测验应用程序,而我的应用程序正常运行罚款的第一次迭代测验它退出没有任何控制台错误在第二次运行。把所有的代码放在下面以供参考。iPhone应用程序崩溃没有任何控制台错误或崩溃日志:

这似乎是当我重新运行测验时, - (void)loadNextWord函数在下面执行,但之后没有任何反应。

请帮忙!

谢谢!从调试器

转储:

我在主FUNC线14为int retVal的= UIApplicationMain(的argc,argv的,零,无);

#import <UIKit/UIKit.h> 

int main(int argc, char *argv[]) { 

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

Program received signal: “EXC_BAD_ACCESS”. 
(gdb) 
#0 0x025f0907 in objc_msgSend() 
#1 0x05f28da0 in ??() 
#2 0x023cfc9d in _CFAutoreleasePoolPop() 
#3 0x0001ee67 in -[NSAutoreleasePool release]() 
#4 0x002cfe7f in _UIApplicationHandleEvent() 
#5 0x02d73822 in PurpleEventCallback() 
#6 0x02474ff4 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__() 
#7 0x023d5807 in __CFRunLoopDoSource1() 
#8 0x023d2a93 in __CFRunLoopRun() 
#9 0x023d2350 in CFRunLoopRunSpecific() 
#10 0x023d2271 in CFRunLoopRunInMode() 
#11 0x02d7200c in GSEventRunModal() 
#12 0x02d720d1 in GSEventRun() 
#13 0x002d3af2 in UIApplicationMain() 
#14 0x00002880 in main (argc=1, argv=0xbfffef94) at /Users/vbhardwaj/Documents/ObjectiveC/FinalProject/FunWords/main.m:14 
+2

看起来你可能拼写错了`dealloc`那里... – 2010-12-05 08:22:20

+0

嗨,雅各布 - 它在代码中修复,拼写错误格式化。这似乎不是问题。 。 。 – 2010-12-05 08:41:04

+0

您是否尝试在调试模式下运行?选择调试配置**和**从附加的调试器开始。控制台应该给出一个很好的提示,或者立即停在正确的路线上。 – Eiko 2010-12-05 09:01:30

回答

8

看着你看行

[NSAutoreleasePool release] 

这告诉我,你已经解除对象太多次,即类似的堆栈跟踪:

NSString *string = [NSString stringWithString:@"Hello"]; // This string is autoreleased 
[string release]; // This line won't crash but is WRONG! 

将上面的代码不会立即崩溃,但字符串将被释放并释放。但是,由于它也是autoreleased autorelease池将尝试在未来某个时候再次发布它。你不知道什么时候会发生随机崩溃。

你可能做过类似的事情:)

0

问题出现在多版本中。

为了能够正确调试您的代码,甚至包含文件都是不合理的。 我可以看到你在代码中释放wordImageView。 你不应该那样做。 你应该做的是利用属性,并做一些像

self.wordImageView = nextImageView; 
[nextImageView release]; 

,而不是

[wordImageView release]; // release the flagView's memory 
wordImageView = nextImageView; // reassign flagView to the new view 

您可以随时使用自动释放池太,但这自带内存处罚的问题。

顺便说一句,虽然问题似乎是在主循环,它不存在。这只是autorelease池清理位置,并且出现问题。

在任何情况下,可能看看你的代码,并确保所有'alloc'是由相同选择器内的同一对象的'release'处理。