簡體   English   中英

從傳遞給C ++函數的指針向量訪問矩陣

[英]Accessing Matrices from Vector of Pointers Passed to Function in C++

幾個月前,我開始用C ++編寫程序,在使用指針時遇到了一些麻煩。 在我為工作編寫的代碼中,我已經使用編寫的matrix_t類定義了幾個矩陣。 我創建了一個包含指向這些矩陣的指針的向量。 我將向量傳遞給訪問矩陣的函數。 這是我要執行的操作的一個簡單示例:

#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,它返回的調用堆棧位置沒有源代碼。 如果我不將指針向量傳遞給函數,而是直接在main方法中對其進行訪問,則它可以正常工作。 另外,如果我使用向量而不是矩陣運行相同的代碼,則效果很好。 我認為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM