2012-05-17 75 views
0

我創建了一個可變的字符串對象。現在我已經多次釋放該對象,即使我只分配了一次。根據基本的內存管理規則,這是錯誤的。但是,它會崩潰,但這從來沒有發生過。我期待着一些EXC_BAD_ACCESS錯誤。爲什麼EXC_BAD_ACCESS不會發生?

我收到的錯誤:

malloc: *** error for object 0x6d5ac60: double free 
*** set a breakpoint in malloc_error_break to debug 

爲什麼應用程序不崩潰?

NSMutableString *firstOwner = [[NSMutableString alloc] init]; 
[firstOwner release]; 
[firstOwner release]; 
[firstOwner release]; 
NSMutableString *temporaryObject = firstOwner; 
[temporaryObject release]; 
[temporaryObject release]; 
+1

你已經告訴內存管理系統你不再需要這塊內存了。之後,它可能會或可能不會將其用於其他目的。沒有規則可以保證它會被設置爲導致崩潰的某個值。 –

回答

3

只因爲沒有發生撞車事故並不意味着它不會發生給其他人。

你只是舉例說明了一個情況,應用程序在內存管理出錯後可能會繼續癱軟。崩潰可能不會發生,因爲除了公然過度釋放之外,您不會對對象引用做任何其他操作。

但是,如果您稍後試圖使用或訪問「firstOwner」或「temporaryObject」,那麼您絕對會在EXC_BAD_ACCESS的時間和地點崩潰。訪問不存在或過度釋放的對象是導致這類崩潰的主要原因。