C++ 为什么可以';在这个场景中我不能使用push_back吗?

C++ 为什么可以';在这个场景中我不能使用push_back吗?,c++,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 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;
}
intmain(){
int-q;
cin>>q;
而(q--)
{
int n,开始;
向量adj[n];
对于(int i=0;ix;
//如果(x==1)开始=i;
形容词[i]。推回(x);
}
}
}
//代码
返回0;
}
运行时错误:
运行时错误中止信号从异常中止(3)(Sigabt)

< P>这是因为您没有初始化<代码> N< /代码>。在声明您的向量之前,只需初始化<代码> N< /代码>。如“代码> n=10 < /COD>或<代码> CIN > N< /代码>。< /P> < P>这不是一个有效的C++代码:

vector<int> adj[n];
向量调整[n]; 它可以在gcc和其他一些编译器上工作,因为它们可能对c99样式的数组进行了扩展。 如果启用编译器警告,则可以检测这些警告


@ @普拉什特在其答案中指出,代码中还存在未初始化变量N。使用<代码> N< /代码>是任何可能发生的行为。

首先,数组必须在C++中具有恒定大小。第二,<代码> N< /代码>在任何地方都不初始化。n数组。超级未定义行为部分原因是。编译时应使用最高警告级别。gcc warning
warning:“n”可在未初始化的情况下在此函数中使用[-Wmaybe uninitialized]
虽然我同意这是问题的一部分,但这并不是唯一的问题。对!我在开始工作的时候就一直这样编码。:p可能我应该更清楚一些。请参阅我在原始帖子上的评论。这将解释另一个主要问题。谢谢@Chipster。我还发现了一篇不错的文章。学习新东西很棒!@tamalamity No.这个问题将来可能会对其他人有所帮助。谢谢你指出这一点!