小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


【cppcheck】warning: Either the condition 'x' is redundant or there is possible null pointer dereference

はじめに

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)のコードは冗長ではないか?と警告が表示されます。