Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone EXC_从AudioBuffer进行错误访问_Iphone_Exc Bad Access - Fatal编程技术网

Iphone EXC_从AudioBuffer进行错误访问

Iphone EXC_从AudioBuffer进行错误访问,iphone,exc-bad-access,Iphone,Exc Bad Access,我正在尝试使用AudioUnitforiPhone应用程序录制 更改:(开始)我添加了以下代码 bufferList = (AudioBufferList *)malloc(sizeof(AudioBuffer)); bufferList->mNumberBuffers = 1; bufferList->mBuffers[0].mNumberChannels = 2; bufferList->mBuffers[0].mDataByteSize = 1024;

我正在尝试使用AudioUnitforiPhone应用程序录制

更改:(开始)我添加了以下代码
    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));
更改:(结束)

修正:(我得到OSStatus-50错误代码)-因为我没有初始化缓冲区列表

我正在从AudioBuffer(ioData->mBuffers[0].mData)执行错误访问


我不确定这个错误。请帮助我解决此问题。

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

但别忘了在项目结束后禁用此参数。

我解决了它

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

我刚刚删除了一个回调函数

只需查看以下链接即可了解相关信息。

您的缓冲区列表初始化为什么?列表中的元素通常是记录样本的存放位置。我没有初始化bufferList中的任何内容。但我正在从ioData读取数据,我发现了问题。实际上AudioBufferList(我的意思是ioData)没有数据。这就是为什么,它给出了这个错误。但是我不知道怎么解决这个问题。你有什么办法解决这个问题吗。问题是,;AudioBufferList(ioData)没有数据。所以只有它给出了错误。

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);
    .....
}