cin >> a >> b;在C ++中错误

时间:2019-12-16 11:51:55

标签: c++

奇怪的是我找不到任何问题,但是它崩溃了。在代码行22中,发生错误的地方。输入一对数字的第二行时,程序崩溃。
#include <iostream>
#include <queue>
using namespace std;

int main(){
    int t;
    cin>>t;
    int n, e, s, u, v;
    int* martix = nullptr, *mask = nullptr;
    for(int i = 0; i<t; i++){
        cin>>n>>e>>s;
        martix = new int[n*n];
        mask = new int[n];
        for(int i = 0; i<n*n; i++){
            mask[i] = 0;
            for(int j = 0; j<n; j++){
                martix[i*n+j] = 0;
            }
        }

        while (e--){
            cin>>u>>v;//when inputing this two int variable in second time, program crashes
            martix[u*n+v] = 1;
            martix[v*n+u] = 1;
        }

        cout<<s<<' ';
        mask[s] = 1;
        queue<int> q;
        q.push(s);
        while(!q.empty()){
            s = q.front();
            q.pop();
            for(int i=0; i<n; i++){
                if(martix[s*n+i]!=0&&mask[i]!=1){
                    cout<<i<<' ';
                    q.push(i);
                    mask[i] = 1;
                }
            }
        }
        cout<<endl;
        delete [] mask;
        delete [] martix;
    }
    return 0;
}

测试案例:

1
6 7 0
0 3
0 4
1 4
1 5
2 3
2 4
3 5

预期输出:

0 3 4 2 5 1

enter image description here

1 个答案:

答案 0 :(得分:3)

i可以运行到n * n - 1,并且可以运行jn - 1

在那时(以及之前),您用作数组索引的表达式i * n + j超出了数组范围。这是未定义的行为,正在(有帮助地)表现为崩溃。

您是说只运行in,而不是平方?

请注意,如果您在裸数组上使用std::vector.at方法而不是[],则C ++运行时将引发异常,这对于诊断和调试将是微不足道的。解决。