【问题标题】:Dynamic matrix class动态矩阵类
【发布时间】:2017-03-02 17:17:48
【问题描述】:

我需要构造一个矩阵类并使用特定的函数为其赋值。

这是我的代码:

class MATRIX
{
    int row, col;
    double **p;
public:
    MATRIX(int, int);
    void Set(int, int, double);
    ~MATRIX();
};

MATRIX::MATRIX(int x, int y)
{
    row = x;
    col = y;
    p = new double*[x];
    for (int i = 0; i < x; i++)
    {
        p[i] = new double[y];
    }
}

void MATRIX::Set(int a, int b, double d)
{
    p[a][b] = d;
}

    MATRIX::~MATRIX()
{
    for (int i = 0; i < row; i++)
        delete[] p[i];
    delete[] p;
}

int main()
{
    MATRIX A(2, 3); // Initializes a matrix with size 2x3
    MATRIX B(7, 4); // Initializes a matrix with size 7x4

    A.Set(1, 2, 4.7); // Sets the value of A[1][2] to 4.7
    B.Set(0, 3, 2.9); // Sets the value of B[0][3] to 2.9
}

我在Set 函数中的调试器中看到了这个:

this->p was 0x1110112

我该如何解决?

【问题讨论】:

  • 什么显示了这个错误?你的调试器?发生了什么?
  • 放弃容易出错的手动内存管理,只使用std::vector(或至少使用智能指针 - 我们不再是 98 年 - 现代 C++ 是 比这个杂碎好多了)。
  • p 是 0x1110112 有什么问题?应该是什么?

标签: c++ class matrix dynamic


【解决方案1】:

因为这是 C++,而且看起来更像 C。也许一个好的第一步是编辑一些代码。我建议您将 C 样式数组更改为 std::array 或 std::vector。它会在头文件中这样:

template<typename T, std::size_t rows, std::size_t columns> 
class MATRIX
{
    std::array<std::array<T, columns>, rows> matrix_data;

public:
    MATRIX();
    void Set(int, int, double);
    ~MATRIX();
};

这使用了一个模板类,这意味着您必须在 main 中执行类似的操作

MATRIX<double, 2, 3> A;

我没有时间编写整个代码,但我认为这会让你继续前进!祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2018-01-27
    • 2021-10-13
    • 2023-03-06
    • 2018-05-17
    • 1970-01-01
    相关资源
    最近更新 更多