我正在使用 Novocaine 在应用程序中播放音频,并且在执行以下步骤后我一直在崩溃:
- 在没有插入耳机的情况下在 iPhone 上打开应用程序
- 在应用程序中开始音频播放
- 插入耳机
该应用程序在outData[i*stride] = mData[whichChannel][idx];
以下函数中崩溃:
void RingBuffer::FetchData(float *outData, SInt64 numFrames, SInt64 whichChannel, SInt64 stride)
{
int idx;
for (int i=0; i < numFrames; ++i) {
idx = (int)((mLastReadIndex[whichChannel] + i) % (mSizeOfBuffer));
outData[i*stride] = mData[whichChannel][idx];
}
mLastReadIndex[whichChannel] = (mLastReadIndex[whichChannel] + numFrames) % (mSizeOfBuffer);
mNumUnreadFrames[whichChannel] -= numFrames;
if (mNumUnreadFrames[whichChannel] <= 0) mNumUnreadFrames[whichChannel] = 0;
}
在头文件中,mData
声明为float **mData;
,编辑器中的错误消息为“AURemoteIO::IOThread(14): EXC_BAD_ACCESS (code=1, address=0x0)”。
如果我po mData[whichChannel][idx]
在控制台中输入,我会收到消息“错误:无法应用表达式副作用:无法解除结果变量:无法读取其内存。”
这里发生了什么,我该如何避免它?作为一名 Objective-C/Swift 开发人员,这对我来说是陌生的水域,所以任何帮助都将不胜感激。谢谢阅读!
编辑:崩溃时的附加调试信息:
numFrames=1024
whichChannel=1
stride=2
idx=6 // though it's been several different numbers before at the time of crash