2012-05-17 45 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的时间和地点崩溃。访问不存在或过度释放的对象是导致这类崩溃的主要原因。