Если символ 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
экземпляров, поскольку будет выделено надлежащее количество места.