2012-12-07 33 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; 
}