c++ - 在全局范围内声明二维 vector 会导致段错误

标签 c++ arrays vector graph

#include <bits/stdc++.h>

using namespace std;

int n;
std::vector<bool> visited(n,false);
std::vector<std::vector<int>> g(n,std::vector<int>(n));


int main() {
    cin>>n;
    //std::vector<std::vector<int>> g(n,std::vector<int>(n));
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            cin>>g[i][j];
        }
    }
    cout<<g[0][0];

}
在 main 函数中声明的 2D vector 没有错误,但在全局范围内声明时会出现 SIGSEV 错误

最佳答案

visitedg得到初始化,n 的值是 0 . ( n 在全局命名空间中声明,将是 zero-initialized 。)所以 vector s 为空且不包含任何元素。然后像g[0][0]一样访问它们导致UB。
另一方面,对于 vector g声明于 main() , n设置为某个值,然后用于初始化 g ,然后 g初始化为包含 n元素。

关于c++ - 在全局范围内声明二维 vector 会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67682689/

相关文章:

c++ - 模板变量

c++ - Xlib:XGetWindowAttributes 总是返回 1x1?

javascript - 从数组中删除除特定元素之外的元素

c++ - 使用静态 vector 作为存储

c++ - 在 "2d-vector"(vector< vector<>>) 中创建 vector 大小的 vector ?

delphi - 方向角或将3D角指向空间中的位置

c++ - ldap_search 函数成功。但是 ldap_count_entries 给出零(0)?

C++ I/O 文件流相对于 C 语言的优势

python - 使用 numpy 生成 tall 数组

arrays - 如果我将文件内容读入数组,是否需要初始化数组?