【发布时间】:2011-06-14 09:08:31
【问题描述】:
当某些成员的大小在代码时未知时,我想要一些关于处理结构的安全方法的建议。
例如,我有一个名为“Channel”的结构。该结构有一个成员名称“AudioSourceOBJ”,它是指向名为“AudioSource”的其他结构类型数组的指针。在程序运行之前,我不知道每个通道有多少个 AudioSource。我就是这样处理的。
频道对象
struct channelobj {
AudioUnitSampleType *leftoutput;
AudioUnitSampleType *rightoutput;
AudioSourceOBJ *audioSource;
};
音源
struct audiosourceobj {
AudioUnitSampleType *leftoutput;
AudioUnitSampleType *rightoutput;
};
可变大小结构的创建
void createInputs(ChannelOBJ channel,int numAudioInputs)
{
channel->audioSource=(AudioSourceOBJ *)malloc(numAudioInputs * sizeof(AudioSourceOBJ));
for (int i=0;i<numAudioInputs;i++)
{
AudioSourceOBJ obj;
obj=newAudioSourceOBJ();
channel->audioSource[i]=obj;
}
}
我觉得这样可以吗?
我现在面临的问题是,即使我可以在我的通道结构中为正确数量的音频对象分配内存,但直到在程序的后期才会设置 audiosource 结构中的 leftoutput 和 rightoutput 数组。它们将填充少量数据,并且可能在应用程序的整个生命周期内改变大小和内容。
每次我想对单个音频对象进行更改时,我是否必须完全重新分配包含音频源的通道?
什么是安全的方法或有更好的方法?
【问题讨论】: