Отладки C ++ - чтение из файла и вывод 2D-массива

0
#include<iostream>
#include<fstream>
using namespace std;


int main(){
      ifstream infile;
      int X,Y;
      char ch;
      infile.open("input.txt");
      int** intarray = new int*[X];
      for(int i = 0; i < X; ++i)
       intarray[i] = new int[Y];
           for(int k=0; k<16; ++k){
             for(int j=0; j<24; ++j){
              infile >> intarray[k][j];
              cout << intarray[k][j]<<" ";
             }
           cout<< endl;
           }

           infile.get(ch);

  infile.close();

}

Вот что я написал до сих пор, массив объявляется динамически, но когда я запускаю, появляется ошибка, указывающая на ошибку сегментации (сбрасывание ядра). для входного файла первая строка - 4 числа: #rows #columns min-value max-value, мне нужно распечатать их и поместить целые числа в 2-й массив, начиная вторую строку. Как я могу это сделать?

  • 1
    X и Y неинициализируются, когда вы используете их в качестве размера для массива (и в качестве конечного условия for циклов for ) ... Неопределенное поведение.
  • 0
    Почему бы не использовать вектор вместо?
Показать ещё 3 комментария
Теги:

1 ответ

0

Обычно вы начинаете с заранее заданного массива определенного размера, а затем увеличиваете емкость по мере добавления большего количества элементов. Это означает, что когда элемент ожидает ввода в массив, но массив заполняется до его заданной емкости, вы выделяете новый больший блок памяти, копируете элементы из исходного массива в новый массив, а также новый элемент, delete[] исходный массив и назначить его новому массиву.

Однако для этого требуется управление памятью, что в целом не является хорошей практикой в C++. Причина в том, что есть улучшения, такие как std::vector который является оберткой вокруг динамического массива, по существу описанного выше. Но поскольку вы новичок, я бы сказал, сначала разработайте знания о работе с материалами низкого уровня, а затем проработайте свой путь вверх.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню