c++ - 为什么我不能在这种情况下使用 push_back?

标签 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) 的运行时错误中止信号

最佳答案

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

vector<int> adj[n];

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

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

关于c++ - 为什么我不能在这种情况下使用 push_back?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57368790/

相关文章:

c++ - 使用 cstrings 时未处理的异常

c++ - 事件对象不采用 C++ 类

python - 在 C++ 程序中嵌入 python-opencv 的问题(单张图片正常,但在网络摄像头上失败)

c++ - 模板类型推导

c++ - 控件不在非模式对话框 MFC 中呈现

c++ - "lock add"在x86处理器上是如何实现的

c++ - 如何访问第i个 map 成员?

c++ - 从基类指针获取派生成员

c++ - 使用局部变量在函数内设置类成员

c++ - 运算符重载、名称解析和命名空间