我開始寫在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是矩陣的行數。如果一切都失敗了,我就結合我的矩陣轉換成一個矩陣和傳遞的功能,但我想明白爲什麼這是行不通的。任何輸入將不勝感激。
您可以發佈的錯誤信息? – Barney
另外,在這裏發佈**矩陣的相關**部分。 – Barney