Visual Studio中的警告C6385

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Studio中的警告C6385相关的知识,希望对你有一定的参考价值。

我似乎从Visual Studio 2019(16.5预览版以及16.4和更早版本)代码分析工具中收到错误警告消息。这是一个错误,还是我真的只是缺少一些东西?

生成的警告(准确地是:)>

警告C6385:从'prodlist'读取无效数据:可读大小为'(size_t)* 32 + 8'字节,但可能读取'64'字节。

这里是生成警告的代码(尽可能少)

#include <cstdint>
#include <string>
#include <iostream>

struct Product 
    std::string price_profile;
;

int getNumRows() 
    return 5;


Product *getProductsFromDB( int &numelements ) 
    numelements = 0;

    const int num_rows = getNumRows();
    if ( num_rows == 0 ) 
        numelements = 0;
        return nullptr;
    

    Product *prodlist = new Product[num_rows];
    for ( int i = 0; i < num_rows; ++i ) 
        prodlist[i].price_profile = "test"; // Warning on this line
    
    numelements = num_rows;

    return prodlist;


int main() 
    int num_rows;
    Product *prodlist = getProductsFromDB( num_rows );
    for ( int i = 0; i < num_rows; ++i ) 
        std::cout << prodlist[i].price_profile;
    

    getchar();

如果将price_profile更改为int(及其对应的值),或者如果将num_rows更改为常数(例如5,则警告消失。

我似乎从Visual Studio的代码分析工具收到错误的警告消息。这是一个错误,还是我真的只是缺少一些东西?生成的警告(准确地)是:警告C6385:...

答案

[在Visual Studio 2019中,Microsoft似乎默认情况下对C和C ++代码强制执行SAL分析规则,尽管仍然有很多误报类似您的案例。

以上是关于Visual Studio中的警告C6385的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 中的“将所有警告视为错误,除了...”

Visual Studio 中的 C4275 警告

禁止对 Visual Studio 中的所有项目发出警告

Visual Studio 2019 中的 GDAL 库头文件错误和警告

解决 Visual Studio 2005/2008 中的“Validation (): Element ‘xxxx’ is not supported”警告

Visual Studio Community 2019 中的 C++ 代码分析产生警告 C26486 和 C26414