コードに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)
行。
ここで私の注釈で何が磨耗していますか?どうすれば修正できますか?