Я пытаюсь запустить трехмерный массив, но когда я запускаю его, код просто вылетает в Windows, вот мой код;
#include <iostream>
using namespace std;
int main(){
int myArray[10][10][10];
for (int i = 0; i <= 9; ++i){
for (int t = 0; t <=9; ++t){
for (int x = 0; x <= 9; ++t){
myArray[i][t][x] = i+t+x;
}
}
}
for (int i = 0; i <= 9; ++i){
for (int t = 0; t <=9; ++t){
for (int x = 0; x <= 9; ++t){
cout << myArray[i][t][x] << endl;
}
}
}
system("pause");
}
может кто-нибудь дать мне быстрое исправление / объяснение





У вас дважды есть линия
for (int x = 0; x <= 9; ++t){
когда ты имеешь в виду
for (int x = 0; x <= 9; ++x){
Классическая ошибка копирования и вставки.
Кстати, если вы запустите это в отладчике и посмотрите значения переменных, довольно легко увидеть, что происходит.
Это неспроста называется «классической ошибкой копирования и вставки». Мы все это сделали. :-)
Ответ Дэвида правильный.
Между прочим, соглашение заключается в использовании i, j и k для вложенных индексов итератора, а также использование <array_length вместо <= array_length -1 в качестве признака конца.
Если вы это сделаете, вы можете сделать размер массива постоянным и избавиться от некоторых магических чисел.
Кроме того, утверждение в точке, где вы используете индексы массива, могло указать вам на ошибку.
Результат может выглядеть так:
const std::size_t ARRAY_SIZE = 10;
int myArray[ARRAY_SIZE][ARRAY_SIZE][ARRAY_SIZE];
for (std::size_t i = 0; i < ARRAY_SIZE; ++i)
{
for (std::size_t j = 0; j < ARRAY_SIZE; ++j)
{
for (std::size_t k = 0; k < ARRAY_SIZE; ++k)
{
std::assert (i < ARRAY_SIZE && j < ARRAY_SIZE && k < ARRAY_SIZE);
// Do stuff
}
}
}
Я предпочитаю писать по одному условию для каждого утверждения, чтобы было понятнее, что условие который не выполнено.
также нет "std :: assert", assert - это макрос (я бы хотел, чтобы вы могли использовать макросы пространства имен ...)
Я бы также сказал (хотя это не очень важно) поставить i ++ вместо ++ i. Просто выглядит аккуратнее. ИМХО
также (просто мелочь), вы забыли точку с запятой после определения массива :)
На самом деле лучше иметь привычку делать ++ i, потому что инкремент-и-выборка - менее затратная операция, чем выборка-и-инкремент, хотя компилятор обычно оптимизирует ее.
Вы также могли бы найти то же самое, включив строку «cout <<» в свой первый вложенный цикл.