0

我创建了一个可变字符串对象。现在我已经多次释放该对象,即使我只分配了一次。根据基本的内存管理规则,这是错误的。但是它应该崩溃,但这永远不会发生。我期待一些 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];
4

1 回答 1

3

仅仅因为崩溃不会发生在你身上并不意味着它不会发生在其他人身上。

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

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

于 2012-05-17T12:36:12.907 回答