为什么不发生EXC_BAD_ACCESS?

时间:2012-05-17 12:30:14

标签: objective-c 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 个答案:

答案 0 :(得分:3)

仅仅因为你没有发生崩溃并不意味着其他人不会发生。

您只是说明了在发生内存管理错误后应用可以继续跛行的情况。崩溃可能不会发生,因为除了公然过度释放之外,你没有对对象引用做任何其他事情。

但是如果您之后尝试使用或访问“firstOwner”或“temporaryObject”,那么您绝对会在EXC_BAD_ACCESS崩溃。访问不存在或过度释放的对象是导致这类崩溃的主要原因。