はじめに
C++の静的解析ツール「cppcheck」でソースコードを静的解析した場合に、以下の警告がでることがあります。
warning: Either the condition 'x' is redundant or there is possible null pointer dereference.
cppcheckのバージョン
- v1.73
サンプルプログラム
以下のソースプログラムを解析にかけると表示されます。
#include "afx.h" bool MyMethod(char* val1); int _tmain(int argc, _TCHAR *argv[]) { bool ret = MyMethod("val1"); return 0; } bool MyMethod(char* val1) { char tmp[5] = {0}; memcpy(tmp, val1, 5); if (val1 == NULL) // warning: Either the condition 'val1==0' is redundant or there is possible null pointer dereference: val1. { return false; } return true; }
上記のように、val1のnullチェックを実施しているよりも前にval1に参照するようなコードがある場合、memcpy(tmp, val1, 5);の時点でval1はNULLでないことは明確であり、if (val1 == NULL)のコードは冗長ではないか?と警告が表示されます。