我认为我在代码中所做的事情是合法的,但它显示了运行时错误。为什么?
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)的运行时错误中止信号
答案 0 :(得分:2)
这不是有效的C ++代码:
vector<int> adj[n];
它可能对gcc和其他一些编译器有效,因为它们可能对c99样式数组具有扩展名。 如果打开编译器警告,则可以检测到这些警告。 Live
正如@Prakasht在他们的答案中指出的那样,代码中还存在未初始化的变量n
。使用n
是未定义的行为,任何事情都可能发生。
答案 1 :(得分:1)
那是因为您没有初始化n
。在声明向量之前,只需初始化n
。像n=10
或cin>>n
之类的东西。