2010-12-05 85 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'處理。