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;
}
私は何かを追加したいと思います(私が間違っていれば私を訂正してください):そうでなければ、clientFormatに明示的にプロパティを設定しないと、不確定な値を持ちます。それ以前のメモリ)。これが、GLテクスチャを作成するためのピクセルバッファ、またはCGImageであれば、すべてのバイトをすぐに上書きするつもりなら、それは必要ありません。 – borrrden
確かに。 :)メモリが適切に埋め込まれていることが分かっていない限り、 'memset()'はまだ良い習慣です。 –
ok-私はそれを得る。 memsetがなければ、すべての構造体フィールドを0(またはその他の有効な値)に設定する必要があります。 (これは古い疑問には間違いありませんが、基本的なものなので、多くの本/チュートリアルではこのことを知っていると仮定しています) –