инициализация 2d std::массива в классе работает в сборке выпуска, но не в отладке

#c

Вопрос:

Я пытаюсь создать класс 2d-массива для различных случаев использования, где я знаю размер во время компиляции и что он не изменится во время выполнения. Т. Е. настройка сетки для игры в линкоры.

текущая реализация работает как в отладке, так и в выпуске при использовании сбалансированных 2d-массивов, таких как 2 на 2, однако при использовании несбалансированных 2d-массивов, таких как 2 на 3, она будет работать в выпуске, но не в отладке. Я получаю выражение: индекс массива вне диапазона при отладке

я использую visual studio 2022 RC с включенным std 20

файл заголовка

 template lt;class T,unsigned int colSize,unsigned int rowSizegt;  class TwoDArray{  public:  TwoDArray(){   for (int i = 0; i lt; colSize;   i) {  for (int j = 0; j lt; rowSize;   j) {  matrix[i][j] = j;  std::cout lt;lt; matrix[i][j] lt;lt; " ";  }  std::cout lt;lt; " " lt;lt; i lt;lt; std::endl;  }   }  private:  std::arraylt;std::arraylt;T, colSizegt;, rowSizegt; matrix;  }  

в основном

 int main(){    auto p = TwoDArraylt;int,2 ,3gt;{};    return 0; }  

Сборка выпуска для создания 2d-массива в классе .png

debugBuild для создания 2d массива в классе

Комментарии:

1. Ты перепутал colSize и rowSize в своих петлях для. Внешний должен быть rowSize

2. Сборка отладки полезна и добавляет дополнительные проверки того, что вы не выходите за пределы массива, сборка выпуска позволяет вам делать все, что вы хотите, и вам «повезло», что она не вылетает

Ответ №1:

Проблема заключалась в перепутывании colSize и rowSize в for циклах. Полезно знать о том, что позволяет вам делать сборка релиза.