gpt4 book ai didi

c++ - 指向调用者 SAL 错误的指针的输出

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:33 24 4
gpt4 key购买 nike

我正在尝试添加 SAL到我的代码...我根据 msdn 工作并在 msdn 示例中发现错误,不知道如何处理它。

此处稍微更改了示例“指向调用者的指针输出(示例:Outptr 注释)”,来自 Understanding SAL

Outptr is used to annotate a parameter that's intended to return a pointer. The parameter itself should not be NULL, and the called function returns a non-NULL pointer in it and that pointer points to initialized data.

我的代码:

#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;
}

如果我在 VS2013 中编译它并启用代码 alalysys,我会得到 C6001: using uninitialized memory

对于

if (*pInt != NULL)

行。

我的注释中有什么问题,我该如何解决?

最佳答案

由于您正在读取通过指针参数 pInt 传递的值,因此您不能使用 _Outptr_ ,因为它描述了仅用作输出的参数,也不作为输入。请改用 _Inout_

您可能需要重新考虑使用 SAL。它的文档非常少,因此我不能肯定地说 _Inout_ 实际上是这里使用的最佳注释。我所知道的是,根据微软模糊的描述,它是我能找到的最佳匹配,并且它摆脱了警告。当然,不使用注解也是如此。

关于c++ - 指向调用者 SAL 错误的指针的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26679027/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com