2014-11-02 59 views
-1

所以即時通訊設計一個程序,使用向量的int和im向量創建一個矩陣試圖超載+,以便我可以將兩個矩陣一起添加。這是我第一次讓運營商超負荷運轉,並且遇到了一些麻煩。我實現了運算符+,當我使用測試程序類運行它時,出現分段錯誤,它不告訴我在哪裏。所以我增加了cout來查看它出錯的地方;它發生在我調用matrix2 = matrix1 + matrix2時。我不知道有什麼錯誤意味着什麼,或者我做錯了什麼。重載運算符+和分割錯誤C++

Matrix.cpp(其中過載成員函數):

Matrix Matrix::operator+(Matrix m){ 
    vector<int> mRow; 
    vector<int> newRow; 
    Matrix newM(row, column); 
    for(int i =0; i<row; i++){ 
     mRow = m.getRow(i); 
     for (int j=column; j<0; j--){ 
      newRow.push_back(matrix[i][j]+mRow[j]); 
     } 
     newM.setRow(newRow,i); 
    } 
    return newM; 
} 

TesterClass.cpp:

Matrix m2(rowVec.size(), colVec.size()); 
    rowVec = matrix.getRow(1); 
    cout <<"Made new matrix" <<endl; 
    for (int i=0; i <= row-1; i++){ 
     cout <<"for l" <<endl; 
     m2.setRow(rowVec,i); 
    } 

    cout <<"for done" <<endl; 
    Matrix add(row,column); 
    add = matrix + m2; #Program stops here 
    cout <<"added" <<endl; 
    add.output(); 
+0

'for(int j = column; j <0; j - )'???你確定'j <0'?你不應該從'j = column-1'開始嗎? – Christophe 2014-11-02 22:57:02

+0

此外,newRow似乎只是附加到每行。所以每一行,如果它們被設定,會變得越來越大。 (另外,你幾乎可以肯定要使用const引用,而不是將參數複製到+)。或者利用這個事實,即運算符+的參數將成爲副本,並在添加到它之後將其返回。 'for()for()m [i] [j] + = this [i] [j];' – perh 2014-11-02 22:58:27

+0

您確定在測試儀類中添加矩陣和m2的行數和列數相同?你確定你已經正確定義了operator =()? – Christophe 2014-11-02 23:07:13

回答

1

我在加入內環發現的差一錯誤。 for循環將j初始化爲column,但應該從j=column-1開始。這會在訪問mRow[j]時導致段錯誤。此外條件應該改變,爲for (j = column - 1; j > -1; --j)

+1

然而,這不會導致崩潰,因爲內循環將始終完全跳過(i =正; i <0; i--) – perh 2014-11-02 23:01:23