静态分析仪误报?

JHe*_*eni 2 c

我正在我的代码上运行 MSVC 的静态分析器,并且收到无法解决的警告。我不确定这是否是误报,希望您能帮助我解决这个问题。我正在使用 MSVC17。

void GetParam_MEASLIST(Message* pMsgReturn)
{
   pMsgReturn->u8MessageType = MESSAGE_FAILED;

   uint32_t u32ChannelCount = 0;
   u32ChannelCount = ChannelHandler_getChannelCount();
   if (u32ChannelCount == 0)
   {
      return;
   }

   char** szStringList = (char**)malloc(u32ChannelCount * sizeof(char*));
   if (NULL == szStringList)
   {
      return;
   }

   for (uint32_t i = 0; i < u32ChannelCount; ++i)
   {
      ChannelInfo_t tmp = { 0 };
      if (!ChannelHandler_getChannelInfo(i, &tmp))
      {
         LOG_ERROR("Failed to get channel info for channel %i", mg_strLogCat, 10);
      }
      else
      {
         size_t nSize = strlen(tmp.ChannelDeviceInfo.szMeasType) + 1;
         if (nSize > 1)
         {
            szStringList[i] = (char*)malloc(nSize);
            if (szStringList[i] != NULL)
            {
               memset(szStringList[i], 0, nSize);
               memcpy(szStringList[i], tmp.ChannelDeviceInfo.szMeasType, nSize);
            }
         }
         else
         {
            szStringList[i] = NULL;
         }
      }
   }
   size_t nSizeOfList = sizeofStringList((const char**)szStringList, u32ChannelCount);
   pMsgReturn->pData = malloc(nSizeOfList);
   if (pMsgReturn->pData != NULL)
   {
      pMsgReturn->nDataSize = serializeStringList(pMsgReturn->pData, (const char**)szStringList, u32ChannelCount);
      pMsgReturn->bFreeDataAfterSend = true;
      pMsgReturn->u8MessageType = MESSAGE_SUCCESS;
   }
   for (uint32_t i = 0; i < u32ChannelCount; i++)
   {
      if (NULL != szStringList[i]) //< error szStringList is uninitialised
      {
         free(szStringList[i]);
      }
   }
   free(szStringList);
}
Run Code Online (Sandbox Code Playgroud)

我收到变量未初始化的错误szStringList,但我不明白为什么。你能帮我解决这个问题吗?

编辑:

根据要求完整错误

警告 C6001:使用了未初始化的内存“*szStringList”。行:219、221、222、223、228、229、234、236、237、243、244、246、247、249、250、234、236、237 , 243, 244, 255, 234, 259, 260, 261, 267, 271, 273, 267, 271

And*_*nle 5

如果执行这段代码:

  if (!ChannelHandler_getChannelInfo(i, &tmp))
  {
     LOG_ERROR("Failed to get channel info for channel %i", mg_strLogCat, 10);
  }
Run Code Online (Sandbox Code Playgroud)

szStringList[i]从未设置。

以后的所有使用szStringList[i]很可能都引用未初始化的值。