Кажется, я получаю ошибочное предупреждающее сообщение от Visual Studio 2019 (16.5 Preview, но также и в 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
), то предупреждение исчезнет.