#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 错误
答案 0 :(得分:1)
当 visited
和 g
被初始化时,n
的值为 0
。 (n
在全局命名空间中声明并且将是 zero-initialized。)所以 vector
是空的并且不包含任何元素。然后像 g[0][0]
一样访问它们会导致 UB。
另一方面,对于g
中声明的向量main()
,n
被设置为某个值,然后用于初始化g
,然后{{1} } 被初始化为包含 g
元素。