为什么在这种情况下不能使用push_back?

时间:2019-08-06 04:06:32

标签: c++

我认为我在代码中所做的事情是合法的,但它显示了运行时错误。为什么?

int main() {
    int q;
    cin>>q;
    while(q--)
    {
        int n, start;
        vector<int> adj[n];
        for (int i=0;i<n;i++)
        {
            for (int j=0;j<n;j++)
            {
                int x;
                cin>>x;
                //if(x==1) start = i;
                adj[i].push_back(x);
            }
        }

    }
    //code
    return 0;
}

运行时错误: 来自abort(3)(SIGABRT)的运行时错误中止信号

2 个答案:

答案 0 :(得分:2)

这不是有效的C ++代码:

vector<int> adj[n];

它可能对gcc和其他一些编译器有效,因为它们可能对c99样式数组具有扩展名。 如果打开编译器警告,则可以检测到这些警告。 Live

正如@Prakasht在他们的答案中指出的那样,代码中还存在未初始化的变量n。使用n是未定义的行为,任何事情都可能发生。

答案 1 :(得分:1)

那是因为您没有初始化n。在声明向量之前,只需初始化n。像n=10cin>>n之类的东西。