2012-10-23 118 views
0

可能重複:
Matrix Arithmetic using Vectors in C++ causing segmentation faults動態矩陣和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。我的錯誤在哪裏?

感謝您的關注。

+0

設置矩陣的大小 – elyashiv

回答

1

您剛創建兩個空向量,並且使用operator[]是未定義的行爲。它們就像大小爲0的數組,如果這樣的事情是可能的。

你必須創建與容量的矢量,並且每個元素將是缺省初始化爲0:

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

第一個參數是所述外vector的大小,並且第二個是值複製到每個元素,這本身就是一個N雙打的矢量。

0

如果您列出的代碼是導致問題的確切代碼,那麼您的問題是您實際上沒有給出「矩陣」的大小。

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

會這樣做。

將來要調試段錯誤,您可以先編譯時沒有優化和調試符號,然後在調試器(如gdb)中運行,然後在缺省情況下回溯。尋求幫助時,回溯也很有用。