我创建了一个可变的字符串对象。现在我已经多次发布了这个对象,即使我只分配了一次。根据基本的内存管理规则,这是错误的。但它应该崩溃,但这种情况永远不会发生。我期待一些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];
答案 0 :(得分:3)
仅仅因为你没有发生崩溃并不意味着其他人不会发生。
您只是说明了在发生内存管理错误后应用可以继续跛行的情况。崩溃可能不会发生,因为除了公然过度释放之外,你没有对对象引用做任何其他事情。
但是如果您之后尝试使用或访问“firstOwner
”或“temporaryObject
”,那么您绝对会在EXC_BAD_ACCESS崩溃。访问不存在或过度释放的对象是导致这类崩溃的主要原因。