cppcheck - エラーの意味

 
mismatchAllocDealloc
resourceLeak
syntaxError
uninitvar

mismatchAllocDealloc

ID:mismatchAllocDealloc
Mismatching allocation and deallocation: 変数名

void hoge(void)
{
    char* a = new char [1];

    delete a;	← ここがまずい
}
 てなソースで表示されちゃいました。これ一応、コンパイルが通っちゃってるのが問題のような気もしますが・・・。  正しくは

void hoge(void)
{
    char* a = new char [1];

    delete [] a;	← これが正解
}
 ですね。

resourceLeak

ID:resourceLeak
Resource leak: 変数名

void hoge(void)
{
	char    abuff[適度な大きさ];

	int     ilineCnt = 0;

	FILE*	file;

	if ((file = fopen("ファイル名", "r")) == NULL)
	{
		perror("fopen");
		exit(errno);
	}

	while (TRUE)
	{
		ilineCnt++;

		// 1行ずつ処理を行う

		if (fgets(abuff, sizeof(abuff)-1, file) == NULL)
		{
			break;
		}

		//	実際には処理がある
	}

	クローズしないで終了している!!
}
 まぁ、実際にはこんなあからさまなバグをほぉっておいたりはしないんでしょうが・・・。  fopen したものは fclose が必要なわけです。

syntaxError

ID:syntaxError
No pair for character ("). Can't process file. File is either invalid or unicode, which is currently not supported.
void sub(void)
{
	int a = 0;

	printf("%d\n, a);
}

 まぁ、例題のようにあからさまなエラーであれば、コンパイラでエラーにもなるし、すぐわかるわけですが。  5行目の "(ダブルコーテーション)が閉じていないわけです。  なんでか、Shift-JIS のソースで cppcheck が文字例をうまく解釈できないときに実際はエラーでもないのにそう解析することがあります。  対策を考慮中です(2018年11月19日)。

uninitvar

ID:uninitvar
Uninitialized variable: 変数名
void sub(void)
{
	int a;

	printf("%d\n", a);
}

 てなソースがあるとして。  3行目で宣言している自動変数を初期化しないまま、5行目で使ってますよってことです。