#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; }
Комментарии:
1. Ты перепутал
colSize
иrowSize
в своих петлях для. Внешний должен бытьrowSize
2. Сборка отладки полезна и добавляет дополнительные проверки того, что вы не выходите за пределы массива, сборка выпуска позволяет вам делать все, что вы хотите, и вам «повезло», что она не вылетает
Ответ №1:
Проблема заключалась в перепутывании colSize
и rowSize
в for
циклах. Полезно знать о том, что позволяет вам делать сборка релиза.