我正在考虑在iPhone SDK 3.1 Developer \ Extras \ CoreAudio \ PublicUtility中使用CARingBuffer,但是对它的某些方法有点疑惑。首先,这对任何使用过这门课程的人来说都是有意义的
例如,GetTimebounds,SetTimeBounds,ClipTimeBounds函数实际上在做什么?
同样在使用它时,我会在主要的Fetch方法中使用示例此方法导致崩溃
- > ZeroABL(abl,0,destStartOffset * mBytesPerFrame);
CARingBufferError CARingBuffer::Fetch(AudioBufferList *abl, UInt32 nFrames, SampleTime startRead)
{
SampleTime endRead = startRead + nFrames;
SampleTime startRead0 = startRead;
SampleTime endRead0 = endRead;
SampleTime size;
CARingBufferError err = ClipTimeBounds(startRead, endRead);
if (err) return err;
size = endRead - startRead;
SInt32 destStartOffset = startRead - startRead0;
if (destStartOffset > 0) {
ZeroABL(abl, 0, destStartOffset * mBytesPerFrame);
}
这里destStartOffset已经变得大于abl Bufferlist的大小,因此当memset完成时,它超出了导致崩溃的abl Bufferlist的边界。为什么这个班级没有办理入住手续以防止这种情况发生?
答案 0 :(得分:1)
您需要下载此类的更新(错误修复)版本,以摆脱越界崩溃。
https://developer.apple.com/library/content/qa/qa1665/_index.html