为什么我的c ++程序崩溃了?

时间:2013-12-29 06:45:02

标签: c++

#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];
    }
}

每当我提供输入mn时,它就会崩溃!我要做的是将输入提供给m行和n列的二维数组。

3 个答案:

答案 0 :(得分:5)

在中读取mn的值后,您需要初始化矢量(或调整其大小)。正如你所知,当初始化向量时,mn为0 *,因此向量的大小为0.

*这只是因为你把它们放在全球范围内。如果放在一个函数中,它们将是未初始化的,并且使用它们的值将是未定义的行为

答案 1 :(得分:5)

因为你已经用完了界限。

name向量是全局变量,因此它在程序启动时初始化,甚至在main函数之前。整数全局变量也在C ++中用0初始化。因此name向量的大小为零。

在阅读nm值后,您需要调整矢量大小。

答案 2 :(得分:1)

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

因为您的名字不是2D矢量。

使用此代码来使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();


}