0

可能重复:
在 C++ 中使用向量的矩阵算术导致分段错误

我在 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。我的错误在哪里?

感谢您的关注。

4

2 回答 2

1

您只是在创建两个空向量,并使用operator[]is undefined 行为。它们就像大小为 0 的数组,如果这样的话是可能的。

您必须创建具有容量的向量,并且每个元素将默认初始化为 0:

vector<vector<double>> Matrix(N, vector<double>(N));

第一个参数是外部的大小,vector第二个是要复制到每个元素中的值,它本身就是一个N双精度向量。

于 2012-10-23T17:07:42.437 回答
0

如果您列出的代码是导致问题的确切代码,那么您的问题是您实际上没有给“矩阵”一个大小。

vector<vector<double> > Matrix ( N, vector<double>(N) );

会这样做。

将来要调试段错误,您可以先在不进行优化和调试符号的情况下进行编译,然后在调试器(例如 gdb)中运行并在出现错误后回溯。在寻求帮助时,回溯也很有用。

于 2012-10-23T17:07:47.607 回答