はじめに
C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。
Buffer 'xxx' is being written before its old content has been used.
cppcheckのバージョン
- v1.64
サンプルプログラム
以下のソースプログラムを解析にかけると表示されます。
#include "stdafx.h" #include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { char pBuffer[10]; char val1[5] = "hoge"; char val2[5] = "fuga"; memset(pBuffer, 0, sizeof (pBuffer)); memcpy(pBuffer, val1, sizeof(val1)); printf("%s", pBuffer); memset(pBuffer, 0, sizeof (pBuffer)); //←この行が原因で警告が出る memcpy(pBuffer, val2, sizeof(val2)); return 0; }
警告の意味としては、「変数に格納された古い値が使われる前に別の値が格納されたけど無駄な処理じゃない?」、みたいなニュアンスだと思います。ここでは明示的な初期化を意味しているから、ここで警告だされるのは的外れかなと思っています。
この警告が出たら、ソースコードを確認して初期化処理だったら、無視するのが得策だと思います。