我开始写在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