[英]Output of pointer to caller SAL error
我正在嘗試將SAL添加到我的代碼中...我根據msdn工作,並在msdn示例中發現了錯誤,不知道如何處理。
在這里,litle從理解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)
行。
我的注釋中的磨損是什么,我該如何解決?
由於您正在讀取通過指針參數pInt
傳遞的值,因此無法使用_Outptr_
,因為_Outptr_
描述了一個僅用作輸出而不是輸入的參數。 請改用_Inout_
。
您可能需要重新考慮使用SAL。 它的文檔記錄很少,因此,我不能肯定地說_Inout_
實際上是在此使用的最佳注釋。 我可以肯定的是,根據Microsoft含糊不清的描述,這是我能找到的最佳匹配,它擺脫了警告。 當然不會使用注釋。
編輯 :我對類似的變量名pInt
和pInt2
感到困惑。 您可能應該將pInt
標記為輸入和輸出,而不僅僅是輸出,因為您正在讀取它的值以檢查它是否為NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.