循环通过动态分配的矩阵

时间:2015-10-04 23:23:14

标签: c++ matrix

所以我查看了一些在线问题,以弄清楚如何设置和填充动态多维数组,我认为我把它弄下来但由于某种原因,我的函数不会访问第一(0)列之后的任何内容。对于我的测试,我放入了一个2X2阵列:

2 2 (part of another function that gives the size of the matrix)
1 2
3 4

当我调试它时,我只得到

1 random# from initializing the array
3 random# from initializing the array

我不确定这段代码我做错了什么,我也是C ++的新手。

double* matrix_read(const int m, const int n)
{
double **mat = new double*[m];

for (int j = 0; j < m; ++j) {
    mat[j] = new double[n];
}
for (int i = 0; i < m; ++i) {
    for (int j = 0; j < n; ++j) {

        cin >> mat[i][j];
    }
}
double debug = mat[2][2];
return *mat;
}

在main函数中,这是我发送给函数的内容。

int x, y, m, n;
        cin >> x;
        cin >> y;
        double *mat_a = matrix_read(x, y);
        cin >> m; //2nd matrix read in
        cin >> n;
        double *mat_b = matrix_read(m, n);

1 个答案:

答案 0 :(得分:0)

您的矩阵表示为一个指针数组,数组中的每个指针依次指向一个双精度数组。这些数组中的每一个在内存中是连续的,但在它们之间不是连续的。这意味着mat[0][0]正好在mat[0][1]内存之前。但mat[1][0]可能位于完全不同的位置。

只返回矩阵的第一行*mat(与mat[0]相同),您将丢失信息。您可以访问的只是第一行。

你应该返回整个矩阵。

double** matrix_read(...) {
    ...
    return mat;
}

(编辑:此外,有人必须稍后删除矩阵......他们必须删除几个数组,呃。你应该为矩阵制作一个结构包装器,或者使用单个数组,或者使用向量矢量)