次元を 2 次元配列で渡すという C++ の要件に対する煩わしさから、テンプレート化された Matrix クラスに取り組むことになりました。私は C# で少しコーディングしているので、ここでは少しさびていると思います。
問題は、2 次元配列を削除しようとしているデストラクタに到達するとすぐにヒープ例外が発生することです。
どんな助けもありがたく受け入れました!
template <typename T>
class Matrix {
public:
Matrix(int m, int n) : nRows(m), nCols(n) {
pMatrix = new T * [nRows];
for (int i = 0; i < nCols; i++) {
pMatrix[i] = new T[nCols];
}
}
~Matrix() {
if (pMatrix != NULL) {
for (int i = 0; i < nRows; i++) { delete[] pMatrix[i]; }
delete[] pMatrix;
}
}
T ** GetMatrix() const { return pMatrix; }
T * Row(int i) const { return pMatrix[i]; }
inline T Cell(int row, int col) const { return pMatrix[row][col]; }
inline int GetNRows() const { return nRows; }
inline int GetNCols() const { return nCols; }
private:
int nRows, nCols;
T ** pMatrix;
};