在 Global Scope 中声明 2D Vector 会产生分段错误

Declaring 2D Vector in Global Scope gives segmentation fault

#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 函数内声明的二维向量没有错误,但在全局范围内声明时会出现 SIGSEV 错误

visitedg初始化时,n的值为0。 (n 在全局命名空间中声明,将是 zero-initialized。)所以 vector 是空的,不包含任何元素。然后像 g[0][0] 一样访问它们会导致 UB。

另一方面,对于在main()中声明的向量gn被设置为某个值,然后用于初始化g,然后g 初始化为包含 n 个元素。