次の方法で共有


警告 C28183

引数は 1 つの値である可能性があり、ポインターで見つかった値のコピーです

この警告は、現在のコンテキストでこの値が予期されていないことを示しています。 この警告は、通常、 NULL 値が許可されていない関数に引数として渡されるときに表示されます。 値は指定された変数で実際に見つかりました。引数はその変数のコピーです。

この Code Analysis ツールは、ポインターが NULL であるか、または不正な値が含まれているかを明確に判別できる最初のポイントで、この警告を報告します。 ただし、多くの場合、トレースの前にエラーが実際に発生する可能性があります。 その場合、コード分析ツールは、最初に可能なインスタンスの行番号も提供します。通常は、警告が適切であると明確に判断できない場所に配置されます。 このような場合は、発生する可能性がある以前の場所が警告メッセージに追加されます。 通常、コードの変更は、レポート時点ではなく、その行番号の時点またはその前に行う必要があります。

この例では、Code Analysis ツールによって if ステートメントの s が NULL であると判断され、if の本体が取得されます。 次にポインター st に割り当てられた後、NULL の逆参照が発生する可能性がある方法で t が使用されます。

#include <windows.h>

int fun2(char *s)
{
    char *t;
    if (s == NULL) {
       //... but s is unchanged
    }

    t = s;

    return lstrlenA(t);
}

このコード例では、Code Analysis ツールは以下の警告を報告します。

d:\sample\testfile.cpp(38) : warning C28183: 't' could be '0', and is a copy of the value found in 's':  this does not adhere to the specification for the function 'lstrlenA'.: Lines: 31, 32, 36, 38