簡體   English   中英

指向呼叫者SAL錯誤的指針的輸出

[英]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含糊不清的描述,這是我能找到的最佳匹配,它擺脫了警告。 當然不會使用注釋。

編輯 :我對類似的變量名pIntpInt2感到困惑。 您可能應該將pInt標記為輸入和輸出,而不僅僅是輸出,因為您正在讀取它的值以檢查它是否為NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM