gpt4 book ai didi

c++ - 看不懂VS2015 Analyzer报告

转载 作者:太空宇宙 更新时间:2023-11-04 13:22:30 26 4
gpt4 key购买 nike

分析器报告某个参数未初始化。我不明白为什么。

代码:

LPTSTR buffer = NULL;
DWORD reqSize = 16000;
DWORD dataType;
LPTSTR * array;
DWORD szChars;
BOOL bRegProp;

// Allocate buffer according to required size
buffer = new TCHAR[(reqSize /sizeof(TCHAR))+2];
if(!buffer)
return NULL;

// Get the string into the buffer
if (FALSE == SetupDiGetDeviceRegistryProperty(Devs, DevInfo, Prop, &dataType, (LPBYTE)buffer, reqSize, &reqSize))
return NULL;

szChars = reqSize/sizeof(TCHAR);
buffer[szChars] = TEXT('\0');

分析器的投诉是:

  1. “缓冲区”未初始化
  2. 使用了'buffer',但可能还没有初始化

现在,根据此函数的 SAL 注释 - 您需要确保它不会返回 false:

_Success_(return != FALSE)
_When_((*PropertyRegDataType == REG_SZ), _At_((PSTR) PropertyBuffer, _Post_valid_))
_When_((*PropertyRegDataType == REG_MULTI_SZ), _At_((PZZSTR) PropertyBuffer, _Post_valid_))
WINSETUPAPI
BOOL
WINAPI
SetupDiGetDeviceRegistryPropertyA(
_In_ HDEVINFO DeviceInfoSet,
_In_ PSP_DEVINFO_DATA DeviceInfoData,
_In_ DWORD Property,
_Out_opt_ PDWORD PropertyRegDataType,
_Out_writes_bytes_to_opt_(PropertyBufferSize, *RequiredSize) PBYTE PropertyBuffer,
_In_ DWORD PropertyBufferSize,
_Out_opt_ PDWORD RequiredSize
);

也许我错过了“何时”这件事?

最佳答案

我认为您需要检查 dataType 是否为 REG_SZ(或 REG_MULTI_SZ,如有必要)。

'when' 子句说“如果 dataType 是 REG_SZ,那么 buffer 将被初始化”......但是分析器不知道它是不是存储在 reqSize 中的 REG_DWORD(是的,知道这不是函数存储 REG_DWORD 的地方,但分析器没有)。

关于c++ - 看不懂VS2015 Analyzer报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34587342/

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