2

コードにSALを追加しようとしています... msdn に従って作業したところ、msdn の例にバグが見つかりました。対処方法がわかりません。

ここでは、 SAL についての例「呼び出し元へのポインターの出力 (例: Outptr 注釈)」を少し変更しました。

Outptr は、ポインターを返すことを目的としたパラメーターに注釈を付けるために使用されます。パラメータ自体は NULL であってはなりません。呼び出された関数はその中に NULL 以外のポインタを返し、そのポインタは初期化されたデータを指します。

私のコード:

#include "stdafx.h"
#include "assert.h"

void GoodOutPtrCallee(_Outptr_ int **pInt)
{
    int *pInt2 = new int;

    if (*pInt != NULL)
    {
        *pInt2 = 1;
    }
    else
    {
        *pInt2 = 2;
    }

    *pInt = pInt2;
}

int _tmain(int argc, _TCHAR* argv[])
{
    int* nullValue = NULL;
    GoodOutPtrCallee(&nullValue); 
    assert(*nullValue == 2);

    int someValue = 22;
    int* someValuePtr = &someValue;
    GoodOutPtrCallee(&someValuePtr); 
    assert(*someValuePtr == 1);

    return 0;
}

コードalalysysを有効にしてVS2013でコンパイルすると、C6001が発生しました:初期化されていないメモリを使用しています

為に

if (*pInt != NULL)

行。

ここで私の注釈で何が磨耗していますか?どうすれば修正できますか?

4

2 に答える 2