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行目で使ってますよってことです。