c++ - 在 C++ 中从传递给函数的指针 vector 访问矩阵

标签 c++ pointers matrix

我几个月前开始用 C++ 编写代码,但在使用指针时遇到了一些麻烦。在我为工作编写的代码中,我使用我编写的 matrix_t 类定义了几个矩阵。我创建了一个 vector ,其中包含指向这些矩阵的指针。我将 vector 传递给访问矩阵的函数。这是我正在尝试做的一个简单示例:

#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(即使它针对同一矩阵的同一行和同一列)触发断点,并且我在输出中收到一条错误消息,指出正在访问无效地址。我正在使用 App Verifier,它返回的调用堆栈位置没有源代码。如果我不将指针 vector 传递给函数,而是直接在 main 方法中访问它,它就可以正常工作。此外,如果我使用 vector 而不是矩阵运行相同的代码,它也能正常工作。我不认为 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 是矩阵的行数。如果一切都失败了,我将把我的矩阵合并成一个矩阵并将其传递给函数,但我想了解为什么这不起作用。任何输入将不胜感激。

最佳答案

从语法上讲,我没有发现您的代码有任何问题。尝试运行此代码段(等同于上面的代码段)并查看是否遇到相同的错误。如果不是,问题很可能出在您的矩阵代码中。

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;
}

关于c++ - 在 C++ 中从传递给函数的指针 vector 访问矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13769231/

相关文章:

c++ - 使用模板实现排序。如何使用比较器?

c++ - std::绑定(bind) "no matching function for call"

C - 创建子函数以重新分配数组大小

r - 有什么方法可以在R中独立地对矩阵的列进行排序吗?

c++ - 将相对相机位置添加到现有相机位置

c++ - 构建时 vs2015 和 vc++ 外部依赖项错误

c++ - 我有第三方库,我有错误 LNK2019 : unresolved external . .. 如何调查修复它

c++ - 返回一个带有随机选项和局部变量的 char 函数

c++ - Swig:如何将指针列表从 C++ 返回到 Tcl

c++ - 如何从矩阵中取出 Vector3