なることができ、私は(get_my_struct_from_ [X]機能の復帰の可能性を説明するために実施例)構造またはNULLを指すポインタを返すことができる機能を有している:cppcheckヌルポインタ参照、それは実際にヌル
struct my_struct *my_function(my_struct i) {
if (i.value < 5) return i;
else return NULL;
}
struct my_struct *q;
q = get_my_struct_from_A();
if (q == NULL) {
// display an error message and exit
}
q = get_my_struct_from_B();
if (q == NULL) {
// display an error message and exit
}
CppCheckは文が冗長であるか、可能NULLポインタdereferenがある場合ことを私に語っている:私は、この関数を複数回呼び出すと、値がNULLであるかどうかをチェックしていますメインプログラムで
ce。
質問:
- CppCheckは私にこれらのメッセージを与えないのはなぜ? my_functionのは、2つの機能を取得する方法のための一例であることを言及するのを忘れた
:どのように正しく関数の戻り値をチェックするので、私はこのメッセージ
がEDIT得ることはありません
get_my_struct_from_Aとget_my_struct_from_Bの内部ロジックは異なりますが、出力データ型はmy_functionのshowと同じです。私はget_my_struct_from_X関数をたくさん持ち、戻り値をチェックします。したがって、各getの新しい構造体を作成することはオプションではありません。同じ目的のために使用される変数が大量であるため、その点を考慮しません。
q == null
または!q
を書くと、普通のことと思われるcppcheckから同じメッセージが返されます。
'my_function'に問題があります:戻り値の型は' struct my_struct * '(ポインタ)ですが、' int'( 'i')を返します。 –
cppcheckを使用する前に、警告なしでshopuldをコンパイルしてください。もしあなたが警告を受け取らなかったなら、 '-Wall'でコンパイルしてください –
' my_function'は 'get_my_struct_from_A'と同じですか? – hnefatl