0

AudioToolBox フレームワークの ExtAudioFileOpenURL を使用する iPhone SDK を使用して、サンプル アプリケーションを作成しました。アプリのドキュメント フォルダーに test.mp3 オーディオ ファイルがあります。この API を使用してこのオーディオ ファイルを開こうとすると、EXEC_BAD_ACCESS を受け取りました。理由がわかりませんでした。

コード スニペットを次に示します。

NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *str = [arr objectAtIndex:0];
NSString * temp = [NSString stringWithFormat:@"%@/test.mp3", str];
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)temp, kCFURLPOSIXPathStyle, false);
//AudioFileID fileID ;
//AudioFileOpenURL(url, 0X01, kAudioFileCAFType, &fileID);
ExtAudioFileRef audioFileRef = NULL;
ExtAudioFileOpenURL(url, &audioFileRef);

ExtAudioFileOpenURL を試すと、EXC_BAD_ACCESS が返されます。無効な URL が渡されたためだと思いました。しかし、AudioFileOpenURL を試してみると、URL が有効であることを確認して問題なく動作しました。

4

1 に答える 1

0

EXC_BAD_ACCESS を説明するためにこれを書きました

http://www.loufranco.com/blog/files/Understanding-EXC_BAD_ACCESS.html

基本的に、(おそらく) 解放されたオブジェクトにメッセージを送信しているか、何らかの方法でヒープを破損しています。無害な呼び出しで EXC_BAD_ACCESS が発生する場合、ほとんどの場合、メモリの破損です。

このコードでは決して release または dealloc を呼び出さないため、このコードによってメッセージが割り当て解除されたオブジェクトに送信される可能性はほとんどありません。

したがって、おそらく、EXC_BAD_ACCESS の原因はこのコードの前に発生したものです。このコードをアプリの非常に早い段階に移動することで、これを証明できます。おそらく機能します。そうでない場合は、このコードを実際に確認する必要がありますが、機能する場合は、これらのポイントの間の何かです。

おそらく、破損を見つける最も効果的な方法は、Malloc Debug を有効にしてから、私のブログの指示に従ってデバッガーを使用し、破損したヒープの原因となっている行を見つけることです。

于 2010-08-01T17:44:28.000 に答える