2

私はARC用に書かれたXCode 4.3.1のプロジェクトを持っているので、保持カウントをまったくいじりません。シミュレーターまたはデバイスでプロジェクトを実行すると、正常に動作します。割り当てとリークのプロファイラーで実行すると、正常に実行されます。

ただし、プロジェクトをアーカイブしてアドホック用に配布し、.ipa ファイルをロードすると、アプリがクラッシュしてコンソール メッセージが表示されます。

<Notice>: Quilters_AppP(1812,0x3f85cd98) malloc: *** error for object 0x1109a910: pointer being freed was not allocated
<Notice>: *** set a breakpoint in malloc_error_break to debug

malloc_error_debug にブレークポイントを設定しましたが、リリースされたバージョンでエラーが発生したため、デバッガーが表示されません。

ここで非常に奇妙になります。いくつかの NSLog ステートメントを追加したので、問題は再現しません。

ログは次のとおりです。

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x00000000, 0x00000000
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libsystem_kernel.dylib          0x34f5432c __pthread_kill + 8
1   libsystem_c.dylib               0x36e50208 pthread_kill + 48
2   libsystem_c.dylib               0x36e49298 abort + 88
3   libsystem_c.dylib               0x36e0437a free + 374
4   libobjc.A.dylib                 0x36583d72 object_dispose + 14
5   CoreFoundation                  0x350b6618 -[NSObject dealloc] + 76
6   CoreFoundation                  0x350b6736 -[__NSArrayI dealloc] + 162
7   libobjc.A.dylib                 0x3658316e _objc_rootRelease + 30
8   libobjc.A.dylib                 0x36584e50 objc_release + 32
9   libobjc.A.dylib                 0x36583ea6 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 218
10  libobjc.A.dylib                 0x36583dc2 _objc_autoreleasePoolPop + 6
11  CoreFoundation                  0x350b0cf8 _CFAutoreleasePoolPop + 12
12  UIKit                           0x3218ee34 _wrapRunLoopWithAutoreleasePoolHandler + 36
13  CoreFoundation                  0x35134b14 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 12
14  CoreFoundation                  0x35132d50 __CFRunLoopDoObservers + 252
15  CoreFoundation                  0x351330aa __CFRunLoopRun + 754
16  CoreFoundation                  0x350b649e CFRunLoopRunSpecific + 294
17  CoreFoundation                  0x350b6366 CFRunLoopRunInMode + 98
18  GraphicsServices                0x363b2432 GSEventRunModal + 130
19  UIKit                           0x321ace76 UIApplicationMain + 1074
20  Quilters_AppP                   0x0003505c main (main.m:17)
21  Quilters_AppP                   0x00034af4 0x33000 + 6900

このとらえどころのないバグを捕まえるのを手伝ってください。アプリは 4.3/armv7 を対象としています。

4

4 に答える 4

1

プロジェクトのリリースビルド設定(多くの場合、デバッグビルド設定とはかなり異なります)を使用して、ブレークポイントを設定し、iOSアプリをデバッグできます。ビルド設定または実行/テストスキームのいずれかを変更するだけです。次に、クリーンアップ、ビルド、およびデバイスのデバッグを行います。

于 2012-04-25T19:36:51.390 に答える
1

同様の問題がありました。あなたの二重ループは私のものを正確に説明しました。2 つの while ループの間にネストされた配列が定義されていました。デバッグ モードでは問題ありませんでしたが、リリース用にビルドすると、まったく同じエラーでクラッシュしました。

Xcode 4.xx では、問題を引き起こしているファイルのコンパイラ フラグに -O0 を追加すると (プロジェクト設定 -> ビルド フェーズ -> ソースのコンパイルの下で)、その単一のコンパイラ最適化がオフになります。ファイル。私にとって魅力のように働きました。

ドリュー

于 2012-07-19T06:12:36.103 に答える
0

問題はアプリケーション コードではなく、コンパイラ コードにあるようです。エラーは、ARC プリコンパイラまたはコンパイラ自体にある必要があります。

于 2012-04-26T16:14:08.507 に答える
0

これはコンパイラ エラーです。特に最適化において。テスト用のコードは最適化されておらず、リリース用のコードは「最速、最小」に最適化されています。リリース バージョンの最適化を削除すると、問題はなくなりました。

これをトリガーしたアプリケーション コードは、マネージド オブジェクト コンテキスト アクセスです...

- (NSArray *) fetchForGroup:(Group *)group
{
    NSArray *array = [group.polygons allObjects];
    return array;
}

二重ループ内で実行されます。内側のループで条件が満たされると、関数は「return」によって終了します。この呼び出しからの配列は二重に解放されます。- ダン

于 2012-06-02T19:00:48.083 に答える