来自AudioBuffer的EXC_BAD_ACCESS

时间:2011-01-03 07:05:36

标签: iphone exc-bad-access

我正在尝试使用AudioUnit for iPhone app进行录制。

更改:(开始)我添加了以下代码

    bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer));
    bufferList->mNumberBuffers = 1;
    bufferList->mBuffers[0].mNumberChannels = 2;
    bufferList->mBuffers[0].mDataByteSize = 1024;
    bufferList->mBuffers[0].mData = calloc(256, sizeof(uint32_t));
更改:(结束)


static OSStatus recordingCallback(void *inRefCon, 
                                  AudioUnitRenderActionFlags *ioActionFlags, 
                                  const AudioTimeStamp *inTimeStamp, 
                                  UInt32 inBusNumber, 
                                  UInt32 inNumberFrames, 
                                  AudioBufferList *ioData) {
    OSStatus status;
    status = AudioUnitRender(appdelegate->audioUnit, 
                             ioActionFlags, 
                             inTimeStamp, 
                             inBusNumber, 
                             inNumberFrames, 
                             appdelegate->bufferList);
    if(status != 0)
    NSLog(@"AudioUnitRender status is %d", status);
    SInt16* samples = (SInt16*)(ioData->mBuffers[0].mData);
    .....
}

修复:(我收到OSStatus -50错误代码) - 因为我没有初始化bufferList。

我是来自AudioBuffer的EXC_BAD_ACCESS(ioData-> mBuffers [0] .mData)。

我不确定这个错误。请帮我解决。

2 个答案:

答案 0 :(得分:0)

您正在向已解除分配的对象发送消息。在XCode中转到Project - >编辑Active Executable - >参数 - >单击“加号”按钮,添加NSZombieEnabled并将其值设置为YES。这样做,您可以调试应用程序并找出哪个解除分配的对象仍在接收消息。

但是不要忘记事后在你的项目上禁用这个参数。

答案 1 :(得分:0)

我解决了它;

在我的代码中,我编写了两个回调方法。我们需要两个音频设备才能使用两个音频单元。

我删除了一个回调函数。

只需查看以下链接即可了解相关信息 http://developer.apple.com/library/mac/#technotes/tn2002/tn2091.html