2012-12-07 34 views
1

我開始寫在C++幾個月前和我有使用指針一些麻煩指針。在我爲工作而編寫的代碼中,我使用我編寫的matrix_t類定義了幾個矩陣。我創建了一個包含指向這些矩陣的指針的向量。我將矢量傳遞給訪問矩陣的函數。這裏是什麼,我試圖做一個簡單的例子:訪問矩陣Vector公司的傳遞給函數在C++

#include <iostream> 

#include "matrix_t.h" 

using namespace std; 

int mat_access (vector <matrix_t<int>*> &pmatrices) 
{ 
    matrix_t<int> mat = *pmatrices[0]; 
    return mat.get_cell(0, 0); 
    /*get_cell(r, c) returns the value at row r, column c*/ 
} 

int main() 
{ 
    vector <matrix_t<int>*> pmatrices(1); 

    matrix_t <int> mat (1, 1, 1); 
    /*mat_1(v, r, c) has r rows, c columns, and is filled with the value v*/ 
    pmatrices[0] = &mat; 

    for (size_t i = 0; i < 5; i ++) 
    { 
     int k = mat_access(pmatrices); 
     cout << k; 
    } 
} 

如果我單步執行功能在調試時,它的作品第一次函數mat_access被調用。然而,get_cell第二次被調用(即使它在同一行和同一矩陣的列)斷點被觸發,我在這說的是被訪問的無效地址輸出得到一條錯誤消息。我使用的應用驗證,並返回調用堆棧的位置沒有源代碼。如果我沒有指針的載體傳遞給函數,而只是直接訪問它的主要方法,它工作正常。另外,如果我使用向量而不是矩陣運行相同的代碼,它可以正常工作。我不認爲它與get_cell一個問題,因爲我已經在我的代碼中的其他幾個地方使用它,我敢肯定,索引是正確的。下面是它看起來像matrix_t類中:

T get_cell (size_t row, size_t col) const 
{ try 
    { 
     if (row >= n_rows || col >= n_cols) 
      throw myerror("Index out of bounds"); 
    } 
    catch (exception &e) 
    { 
     cout << "Exception: " << e.what() << '\n'; 
    } 
    return t_array [col * n_rows + row]; 
} 

t_array包含矩陣元素和n_rows是矩陣的行數。如果一切都失敗了,我就結合我的矩陣轉換成一個矩陣和傳遞的功能,但我想明白爲什麼這是行不通的。任何輸入將不勝感激。

+1

您可以發佈的錯誤信息? – Barney

+0

另外,在這裏發佈**矩陣的相關**部分。 – Barney

回答

0

在語法上,我沒有看到你的代碼的任何問題。嘗試運行此代碼段(相當於上面的代碼),看看是否遇到同樣的錯誤。如果不是,最可能的問題是你的矩陣代碼。

int foo(vector<int*> &v) { 
    int x = *v[0]; 
    return x; 
} 

int main() { 
    vector<int*> v(1); 
    int x = 9; 
    v[0] = &x; 
    for(int i = 0; i < 5; ++i) { 
     int y = foo(v); 
     cout << y << endl; 
    } 

    return 0; 
}