ExtAudioFileOpenUrl дает EXC_BAD_ACCESS - PullRequest
0 голосов
/ 22 декабря 2008

Я создал образец приложения с использованием iPhone SDK, который использует ExtAudioFileOpenURL из инфраструктуры AudioToolBox. У меня есть аудиофайл 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);

Я получаю EXC_BAD_ACCESS, когда пытаюсь использовать ExtAudioFileOpenURL. Я думал, что это из-за неверного URL передан. Но когда я попробовал AudioFileOpenURL, он работал нормально, гарантируя, что URL действителен.

1 Ответ

0 голосов
/ 01 августа 2010

Я написал это, чтобы объяснить EXC_BAD_ACCESS

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

По сути, вы (вероятно) либо отправляете сообщения освобожденным объектам, либо каким-либо образом повреждаете кучу. Когда безобидный вызов вызывает EXC_BAD_ACCESS, это почти всегда приводит к повреждению памяти.

Вы никогда не вызываете release или dealloc в этом коде, поэтому маловероятно, что этот код может вызвать отправку сообщений на освобожденные объекты.

Так что, вероятно, все, что вызывает EXC_BAD_ACCESS, произошло до этого кода. Вы можете доказать это, переместив этот код в самом начале вашего приложения - это, вероятно, будет работать. Если нет, то вам действительно нужно проверить этот код, но если он работает, то это нечто среднее между этими точками.

Вероятно, наиболее эффективный способ найти повреждение - включить Malloc Debug и затем следовать инструкциям в моем блоге, чтобы использовать отладчик для поиска строки, которая вызывает поврежденную кучу.

...