(Как) Можно ли избавиться от предупреждения C6386 для постинкрементных индексов в массивах, к которым инициализируются указатели? - PullRequest
0 голосов
/ 26 апреля 2020

Итак, я задавал этот вопрос раньше, но удалил его, потому что он был неясен, и я не смог придумать минимальный воспроизводимый пример. Я использую переменную idx вместе с ++ -оператором для итерации по массиву, чтобы добавить к нему отдельные данные, то есть я не хочу помещать его в for -l oop .

Теперь я провел «исследование» и обнаружил, что это

int main()
{
    int idx = 0;
    int integers[6];
    integers[idx++] = 0;
    integers[idx++] = 5;
    integers[idx++] = 3;
    integers[idx++] = 4;
    integers[idx++] = 1;
    integers[idx++] = 2;
}

не вызывает предупреждение, тогда как это

#include <string>

int main()
{
    int idx = 0;
    std::string* strings[6];
    strings[idx++] = new std::string("Some");
    strings[idx++] = new std::string("stand");
    strings[idx++] = new std::string("-");
    strings[idx++] = new std::string("alone");
    strings[idx++] = new std::string("data");
    strings[idx++] = new std::string(".");
}

вызывает следующее предупреждение, когда Я запускаю программу в режиме отладки (возможно, потому что stati c анализ кода сложен ):

Предупреждение C6386 Переполнение буфера при записи в 'строки ': размер записи составляет 48 байтов, но можно записать 56 байтов.

Помеченная предупреждающая строка не очень важна, поскольку VS имеет тенденцию отмечать случайную строку, но это для меня четвертый из шести распределений памяти. Поэтому мне было интересно, почему я получаю это предупреждение точно, если и как я могу от него избавиться, не меняя idx++ на жестко закодированные индексы. Я предполагаю, что проблема заключается в комбинации оператора ++ и выделения объектов.

Важное примечание: это в Visual Studio, с отладкой> Свойства проекта> C / C ++> Общие> Уровень предупреждения> Уровень 4 включен. Кроме того, это весь код, вызывающий предупреждение на моем VS.

Вот все, что я могу найти в Visual Studio (может быть, что-то еще вызывает это?)

Microsoft Visual Studio Enterprise 2019 (версия 16.5.3) VisualStudio.16.Release / 16.5.3 + 30002.166

Microsoft. NET Framework (версия 4.8.03752)

Установленная версия: Enterprise

Visual C ++ 2019 00433-90002-07609-AA105 Microsoft Visual C ++ 2019

ASP. NET и веб-инструменты 2019 16.5.236.49856 ASP. NET и веб-инструменты 2019

Azure Сервисные инструменты приложения v3.0.0 16.5.236.49856 Azure Инструменты для обслуживания приложений v3.0.0

C# Инструменты 3.5.0-beta4-20153-05 + 20b9af913f1b8ce0a62f72bea9e75e4aa3cf6b0e C# компоненты, используемые в IDE. В зависимости от типа вашего проекта и настроек может использоваться другая версия компилятора.

Color Theme Designer 1.0 Конструктор для создания новых цветовых тем

Common Azure Инструменты 1.10 Предоставляет общие службы для использования Azure Mobile Services и Microsoft Azure Tools.

Cookiecutter 16.5.20041.1 Предоставляет инструменты для поиска, создания и настройки шаблоны в формате cookiecutter.

Расширение IntelliCode 1.0 Расширение IntelliCode Visual Studio Подробная информация

Microsoft Azure Инструменты 2.9 Microsoft Azure Инструменты для Microsoft Visual Studio 2019 - v2.9.30207.1

Microsoft JVM Debugger 1.0 Обеспечивает поддержку подключения отладчика Visual Studio к JDWP-совместимым Java Виртуальным машинам

Microsoft MI-Debugger 1.0 Обеспечивает поддержку подключения Visual Studio к MI-совместимым отладчикам

Microsoft Visual C ++ Wizards 1.0 Microsoft Visual C ++ Wizards

Microsoft Visual Studio V C Пакет 1.0 Microsoft Visual Studio V C Пакет

NuGet Диспетчер пакетов 5.5.0 Диспетчер пакетов NuGet в Visual Studio. Для получения дополнительной информации о NuGet посетите веб-сайт https://docs.nuget.org/

Productivity Power Tools 2017/2019 16.0 Установка отдельных расширений Productivity Power Tools 2017/2019

ProjectServicesPackage Extension 1.0 ProjectServicesPackage Visual Studio Extension Подробная информация

Python 16.5.20041.1 Предоставляет IntelliSense, проекты, шаблоны, отладку, интерактивные windows и другая поддержка для Python разработчиков.

Python - поддержка Conda 16.5.20041.1 поддержка Conda для Python проектов.

Python - Django поддержка 16.5.20041.1 Обеспечивает шаблоны и интеграция для веб-платформы Django.

Python - поддержка Iron Python 16.5.20041.1 Предоставляет шаблоны и интеграцию для проектов на основе Iron Python.

Python - Поддержка профилирования 16.5.20041.1 Поддержка профилирования для Python проектов.

Qt Visual Studio Tools 2.4.3 Qt Visual Studio Инструменты позволяют разработчикам использовать стандартную среду разработки, не беспокоясь о каких-либо шагах или инструментах сборки, связанных с Qt.

Тестовый адаптер для Boost.Test 1.0 Включает инструменты тестирования Visual Studio с модульными тестами написано для Boost.Test. Условия использования и уведомления сторонних производителей доступны в каталоге установки расширения.

Тестовый адаптер для Google Test 1.0 Включает инструменты тестирования Visual Studio с модульными тестами, написанными для Google Test. Условия использования и уведомления сторонних производителей доступны в каталоге установки расширения.

Инструменты TypeScript 16.0.20225.2001 Инструменты TypeScript для Microsoft Visual Studio

Visual Basi c Инструменты 3.5.0-бета4-20153-05 + 20b9af913f1b8ce0a62f72bea9e75e4aa3cf6b0e Visual Basi c компоненты, используемые в IDE. В зависимости от типа проекта и настроек может использоваться другая версия компилятора.

Хост-пакет адаптера отладки кода Visual Studio 1.0 Уровень взаимодействия для размещения адаптеров отладки кода Visual Studio в Visual Studio

Инструменты Visual Studio для CMake 1.0 Инструменты Visual Studio для CMake

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...