2010-12-05 15 views
5

मैं यहां नौसिखिया हूं। मैं एक प्रश्नोत्तरी ऐप बनाने की कोशिश कर रहा हूं और जब मेरा ऐप प्रश्नोत्तरी के पहले पुनरावृत्ति के लिए ठीक चलता है तो यह दूसरे रन पर किसी भी कंसोल त्रुटियों के बिना बाहर निकलता है। संदर्भ के लिए नीचे दिए गए सभी कोड को पस्ट करना।किसी भी कंसोल त्रुटियों या क्रैश लॉग के बिना iphone ऐप क्रैश:

ऐसा लगता है कि जब मैं प्रश्नोत्तरी फिर से चलाने के लिए, लगता है - (शून्य) loadNextWord समारोह नीचे निष्पादित करता है, लेकिन उसके बाद कुछ नहीं होता।

कृपया मदद करें!

धन्यवाद! डीबगर से

डंप:

मुख्य समारोह में मेरी लाइन 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' ... –

+0

हाय याकूब - यह कोड में भी निश्चित होती है, स्वरूपण में गलत वर्तनी कर ली। ऐसा लगता है कि यह मुद्दा नहीं है। । । –

+0

क्या आपने डीबग मोड में चलने का प्रयास किया है? डीबग कॉन्फ़िगरेशन का चयन करें ** और ** डीबगर संलग्न के साथ शुरू करें। कंसोल को एक अच्छा संकेत देना चाहिए या सही रेखा पर तुरंत रोकना चाहिए। – Eiko

उत्तर

8

स्टैक ट्रेस आप लाइन

[NSAutoreleasePool release] 

यह मुझसे कहता है कि आप एक वस्तु को कई बार की तरह कुछ यानी जारी किया है देखने को देखते हुए:

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

ऊपर कोड होगा तुरंत दुर्घटनाग्रस्त नहीं है लेकिन स्ट्रिंग जारी की जाएगी और dealloc'd। हालांकि, क्योंकि यह ऑटोरेलीज पूल को भी ऑटोरेलाइज्ड किया गया है, भविष्य में किसी बिंदु पर इसे फिर से रिलीज़ करने का प्रयास करेगा। आप नहीं जानते कि यादृच्छिक दुर्घटना कब और कब मिलेगी।

आप शायद ऐसा ही कुछ किया है :)

+0

धन्यवाद डीन! वह वास्तव में समस्या थी।मैंने प्रारंभिक समय में स्थानीय/अस्थायी चर मेमोरी प्रबंधन को ऑटोरेलीज़ (खुद को रिलीज़ करने की कोशिश करने के बजाय) में बदल दिया और ऐसा लगता है कि समस्या ठीक हो गई है। –

+0

आह ... इतनी सारी क्रैश रिपोर्ट अचानक समझ में आती है। मैं इस तरह का नोब हूं :) –

0

समस्या कई रिलीज के साथ है।

ठीक से, अपने कोड डिबग करने के लिए भी शामिल फ़ाइलें nessasary हैं सक्षम होने के लिए। मैं देख सकता हूं कि आप अपने कोड में शब्द इमेज व्यू जारी कर रहे हैं। आपको ऐसा नहीं करना चाहिए। क्या करना चाहिए की तरह

self.wordImageView = nextImageView; 
[nextImageView release]; 
बजाय

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

तुम हमेशा भी autorelease पूल का उपयोग कर सकते गुण का लाभ उठाने और कुछ करने के लिए है, लेकिन इस स्मृति दंड मुद्दों के साथ आता है।

Btw, हालांकि समस्या मुख्य पाश में हो रहा है, ऐसा नहीं है। यही वह स्थान है जहां ऑटोरेलीज पूल साफ़ किया गया है, और समस्या प्रकट होती है।

किसी भी मामले में, शायद अपने कोड पर एक नजर है और सुनिश्चित करें कि सभी 'alloc' एक ही चयनकर्ता के अंदर एक ही वस्तु की 'रिहाई' द्वारा नियंत्रित किया जाता हैं।

+0

धन्यवाद Panaytois! –

संबंधित मुद्दे