可能重复:
Matrix Arithmetic using Vectors in C++ causing segmentation faults
我在C ++中创建了这个简单的代码,为动态矩阵分配了一些值:
unsigned N = 1000;
vector<vector<double> > Matrix;
for (unsigned i=0; i<(N-1); ++i) {
for (unsigned j=0; j<(N-1); ++j) {
if ((i>(N/4-1) && i<(3*N/4-1)) || (j>(N/4-1) && j<(3*N/4-1)))
Matrix[i][j] = 1;
else if (i==0 || i==(N-1) || j==0 || j==(N-1))
Matrix[i][j] = 0;
}
}
编译器不会返回任何问题,但是当我尝试运行程序时,它会返回:Segmentation Fault。我的错误在哪里?
感谢您的关注。
答案 0 :(得分:1)
您只是创建了两个空向量,并且使用operator[]
是未定义的行为。如果可能的话,它们就像大小为0的数组一样。
您必须创建具有容量的向量,并且每个元素将默认初始化为0:
vector<vector<double>> Matrix(N, vector<double>(N));
第一个参数是外部vector
的大小,第二个参数是要复制到每个元素的值,它本身是N
双精度的矢量。
答案 1 :(得分:0)
如果您列出的代码是导致问题的确切代码,那么您的问题是您实际上没有给出“矩阵”大小。
vector<vector<double> > Matrix ( N, vector<double>(N) );
会这样做。
将来调试段错误时,您可以先编译,不要使用优化和调试符号,然后在调试器(如gdb)中运行,并在sefault之后进行回溯。在寻求帮助时,回溯也很有用。