warning: suspicious usage of ‘sizeof(sizeof(…))’
警告:’sizeof(sizeof(…))’ の疑わしい使用法。
[misc-sizeof-expression]
■1.失敗例:sizeof(sizeof(…))
#include <string.h>
void f(int ary[],int num){
memset(ary,0,sizeof(num * sizeof(int)));
}
やりたい事がint型の配列をnum個0クリアしたい場合
memset(ary,0,sizeof(num * sizeof(int)));ではなくて
memset(ary,0,num * sizeof(int));のはずです。

■2.失敗例:sizeof*sizeof
(warning): Multiplying sizeof() with sizeof() indicates a logic error.
警告:sizeof()とsizeof()の掛け算は多分間違い
[(warning)multiplySizeof]
#include <string.h>
void NG(void){
char buf[1024];
memset(buf,0,sizeof(char)*sizeof(buf));//ダメ
}
一個のサイズ X 全体のサイズ = 算数的に意味がない
一個のサイズ X 全体の要素数 = 全体のサイズ
●.修正例:sizeof*sizeof
#include <string.h>
void OK(void){
char buf[1024];
memset(buf,0,sizeof(buf)); //良い
}
void OKOK(void){
char buf[1024]={0};//とても良い
}

■3.失敗例:sizeof(定数)
(warning) Suspicious usage of ‘sizeof’ with a numeric constant as parameter.
警告:sizeof(定数)
[(warning)sizeofwithnumericparameter]
#include <string.h>
int main(void)
{
char buf[1024];
memset(buf,0,sizeof(1024));
}
この間違いをあなたはどのように
修正しますか?
memset(buf,0,sizeof(1024));//間違いの例
修正案1:memset(buf,0,1024);
修正案2:memset(buf,0,sizeof(buf));
修正案3:memset(buf,0,sizeof(char)*1024);
修正案4:char buf[1024]={0};
この問題はgccやclangでは見つけてくれません。
cppcheckと言う無料ツールが見つけてくれます。

■4.失敗例:sizeof(配列[定数])
void f(void)
{
char buf[1024];
memset(buf,0,sizeof(buf[1024]));
}
似たような間違いで1024byte全部クリアしてくれそうですが、
1byteしかクリアしません。
この問題を見つけるツールは今のところ知りません。