2012-04-11 6 views
1

ここで本当に基本的な質問:memsetは何をしますか?(CoreAudioで使用されています)

構造体を扱うときに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; 
} 

答えて

1

:ここ

は、以下のコードブロックからのラインですメモリは&clientFormatであり、長さはsizeof(clientFormat)であり、0である。これは、malloc()と他のほとんどの割り当て関数を使用して割り当て後、C内のメモリが0にクリアされないため必要です。

+0

私は何かを追加したいと思います(私が間違っていれば私を訂正してください):そうでなければ、clientFormatに明示的にプロパティを設定しないと、不確定な値を持ちます。それ以前のメモリ)。これが、GLテクスチャを作成するためのピクセルバッファ、またはCGImageであれば、すべてのバイトをすぐに上書きするつもりなら、それは必要ありません。 – borrrden

+0

確かに。 :)メモリが適切に埋め込まれていることが分かっていない限り、 'memset()'はまだ良い習慣です。 –

+0

ok-私はそれを得る。 memsetがなければ、すべての構造体フィールドを0(またはその他の有効な値)に設定する必要があります。 (これは古い疑問には間違いありませんが、基本的なものなので、多くの本/チュートリアルではこのことを知っていると仮定しています) –

関連する問題