#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 错误
最佳答案
当visited
和 g
得到初始化,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/