0

1 つの変更可能な文字列オブジェクトを作成します。オブジェクトを一度だけ割り当てたにもかかわらず、オブジェクトを何度も解放しました。基本的なメモリ管理規則によれば、これは誤りです。しかし、その後クラッシュするはずですが、これは決して起こりません。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 に答える