web-dev-qa-db-ja.com

プログラム受信信号SIGABRT

私はiPhoneアプリケーションで作業しており、UIImageピッカーコントロールを使用してフォトライブラリから画像を選択し、それを処理して、UIImageviewとUITextviewをそれぞれ使用して画像と対応する出力を表示しています。一部の画像では正常に動作し、一部の画像ではプログラムがクラッシュし、ブレークポイントでこれを確認しているときに、PROGRAM RECEIVED SIGNALSIGABRTのようなメッセージが表示されます。誰かが私にこのエラーを処理する方法を提案できますか?注:出力されるすべての画像について、ブレークポイントで確認しました。私のサンプルコードはここにあります、

画像を表示するには:

 CGRect myImageRect = CGRectMake(0.0f, 0.0f, 320.0f, 240.0f);
 UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect];
 [myImage setImage:img];
 myImage.opaque = YES; // explicitly opaque for performance
 [self.view addSubview:myImage];
 [myImage release];

テキストを表示するには:

 CGRect frame = CGRectMake(0.0f, 250.0f, 320.0f,25.0f);
 UITextView * tmpTextView = [[UITextView alloc]initWithFrame:frame];
 tmpTextView.text = [NSString stringWithFormat:@"%@%@",@"value: ", somevalue];
 [self.view addSubview:tmpTextView];
 [tmpTextView release];
9
Ashok

SIGABRTabort(3) 関数によって発生します。詳細情報がないと、プログラムで何が起こっているのかを正確に知ることはできませんが、abort()が呼び出される最も一般的な理由は次のとおりです。

  • そのメッセージをサポート/実装していないObjective-Cオブジェクトにメッセージを送信しています。これにより、恐ろしい "認識されないセレクターがインスタンスに送信されました" エラーが発生します。
  • どこかで失敗したアサーションがあります。マクロNDEBUGを定義する非デバッグビルドでは、標準ライブラリマクロ assert(3) アサーションが失敗するとabort()を呼び出します
  • メモリの踏み込み/割り当てエラーが発生しました。 malloc/freeが破損したヒープを検出すると、abort()を呼び出すことがあります(例: この質問 を参照)
  • キャッチされない例外(C++例外またはObjective-C例外のいずれか)をスローしています

ほとんどすべての場合、デバッグコンソールは、abort()が呼び出される原因についてもう少し情報を提供するので、常にそこを確認してください。

15
Adam Rosenfield