1

ここで本当に基本的な質問:

memset構造体を扱うときに使用する CoreAudio コードの束を見てきましたが、その理由を理解できませんでした。これは .m ObjC ファイルからのものです。

以下のコードブロックの行は次のとおりです。

memset(&clientFormat, 0, sizeof(clientFormat));

//-------

    AudioStreamBasicDescription clientFormat;
    if ( sourceFormat.mFormatID == kAudioFormatLinearPCM ) {
    clientFormat = sourceFormat;
    } else {
    memset(&clientFormat, 0, sizeof(clientFormat));
    int sampleSize = sizeof(AudioSampleType);
    clientFormat.mFormatID = kAudioFormatLinearPCM;
    clientFormat.mFormatFlags = kAudioFormatFlagsCanonical;
    clientFormat.mBitsPerChannel = 8 * sampleSize;
    clientFormat.mChannelsPerFrame = sourceFormat.mChannelsPerFrame;
    clientFormat.mFramesPerPacket = 1;
    clientFormat.mBytesPerPacket = clientFormat.mBytesPerFrame = sourceFormat.mChannelsPerFrame * sampleSize;
    clientFormat.mSampleRate = sourceFormat.mSampleRate;
}
4

1 に答える 1

1

&clientFormat呼び出されると、長さ のメモリを に設定しsizeof(clientFormat)ます0。これが必要になるのは、C のメモリは、および他のほとんどの割り当て関数0による割り当て後にクリアされないためです。malloc()

于 2012-04-11T02:26:12.463 に答える