…,AudioBufferList的定义在我看来很奇怪我想我的C不是很好
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[kVariableLengthArray];
};
typedef struct AudioBufferList AudioBufferList;为什么
AudioBuffer mBuffers[kVariableLengthArray];而不是
AudioBuffer *mBuffers;kVariableLengthArray似乎是== 1。嗯?
我想我有它的工作,但如果有人能纠正我,我将不胜感激。
发布于 2010-04-21 19:13:00
如果符号kVariableLengthArray是编译时常量,这意味着您可以在堆栈上分配单个缓冲区(C中的“自动”存储类型)。
AudioBufferList single;
single.mNumberBuffers = 1;由于该结构包含一个计数,这也意味着您可以创建一个具有任意数量缓冲区的实例,如下所示:
AudioBufferList * get_n_buffers(size_t num)
{
AudioBufferList *list;
if(num < 1)
return NULL;
list = malloc(sizeof *list + (num - 1) * sizeof list->mBuffers[0]);
list->mNumberBuffers = num;
return list;
}后一段代码动态分配一个AudioBufferList,并依赖于该数组是最后一个。因此,在内存中,当分配适当数量的空间时,它看起来好像AudioBuffer以适当数量的AudioBuffer实例结束。
发布于 2010-04-21 18:48:33
AudioBuffer * mBuffers;您正在声明一个指向AudioBuffer的指针
在这种情况下,您需要分配足够的内存,例如使用malloc()。
结构将被放在堆上,使用后需要使用free()释放内存。
AudioBuffer mBuffers[ 1 ];您声明的是一个AudioBuffer数组。内存是在堆栈上自动分配的。不需要拨打免费电话。
因此,当它在结构中时,处理数组更容易,因为您不需要显式地为结构成员分配内存:
AudioBufferList myBufferList;否则,您必须执行以下操作:
AudioBufferList myBufferList;
myBufferList.mBuffers = malloc( sizeof( AudioBuffer ) * kVariableLengthArray );
/* ... */
free( myBufferList.mBuffers );https://stackoverflow.com/questions/2681983
复制相似问题