Почему происходит сбой моей программы на C ++?

0
#include <iostream>
#include <vector>
using namespace std;
int m,n;
vector<vector<int> > name(m,vector<int>(n));
int main()
{
    cin>>m>>n;
    for ( int i=0;i<m;i++)
    {
        for( int j=0;j<n;j++)
            cin>>name[i][j];
    }
}

Каждый раз, когда я даю входные данные m и n, он падает! То, что я пытаюсь сделать, состоит в том, чтобы дать ввод в 2-мерный массив из m строк и n столбцов.

Теги:

3 ответа

5
Лучший ответ

Вам нужно инициализировать свой вектор (или изменить его размер) после чтения значений для m и n. Поскольку у вас это есть, m и n равны 0 *, когда вектор инициализируется, поэтому размер вектора равен 0.

* Это только тот случай, потому что вы разместили их в глобальном масштабе.если они помещены в функцию, они будут неинициализированы, и было бы неопределенным поведением использовать их значения

  • 0
    что может быть решением этой проблемы?
  • 2
    @Aradhya: я уже не сказал? Инициализируйте ваш вектор (то есть создайте его) после того, как вы прочитали значения для m и n из cin , внутри main функции.
Показать ещё 2 комментария
5

Из-за того, что вы исчерпали границы.

name вектор является глобальным переменным, поэтому она инициализируется в момент запуска программы, еще до main функции. Также целые глобальные переменные инициализируются с помощью 0 в C++. Таким образом, вектор name имеет нулевой размер.

После чтения значений n и m вам нужно изменить размер вектора.

1
Error is you are trying to access the index out of bound

Потому что ваше имя не является двумерным вектором.

использовать этот код вместо того, чтобы сделать name 2D - вектор.

vector < vector <int> > name;
vector<int > col;
int r, c;
void main()
{

    cin >> r;
    cin >> c;
    for (int i = 0; i < c; i++)
    {
        col.push_back(i);//push i to col just to make it size of columns needed
    }

    for (int i = 0; i < r; i++)
    {
        name.push_back(col);//pushing vector col of size c into name to 
        //make it a 2D vecotr
    }
    //now name is a 2D vector with r rows of each c column
    cout << "\nNow Enter values";
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < c; j++)
        {
            cin >> name[i][j];//input values
        }
    }

    getch();


}

Ещё вопросы

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