【发布时间】:2015-12-08 12:10:58
【问题描述】:
所以我正在创建一个程序,必须使用 2D 动态数组来加/乘/减矩阵。我已经完成了整个程序,但我的析构函数给了我一些问题。尝试释放内存时,我收到错误“表达式必须具有指针类型”,即使我相信它已经是一个指针?非常感谢您的帮助。
类:
#ifndef matrixType_H
#define matrixType_H
class matrixType
{
friend std::ostream& operator<<(std::ostream& osObject, const matrixType& cObject);
public:
void setValues(int**, int**, int, int, int, int);
void addMatrices();
void subtractMatrices();
void multiplyMatrices();
void printMatrix();
matrixType operator+(const matrixType& object);
matrixType operator-(const matrixType& object);
matrixType operator*(const matrixType& object);
const matrixType& operator=(const matrixType& object);
matrixType(const matrixType& object);
matrixType();
~matrixType();
private:
int row1;
int row2;
int col1;
int col2;
int **matrixPointer1;
int **matrixPointer2;
};
#endif
根据要求,在从源文件获取用户输入后“设置”我的指针的函数。源文件还包含我复制到类中的 2 个 int** 指针
void matrixType::setValues(int **matrix1, int **matrix2, int r1, int r2, int c1, int c2)
{
row1 = r1;
row2 = r2;
col1 = c1;
col2 = c2;
matrixPointer1 = matrix1;
matrixPointer2 = matrix2;
}
给我带来问题的函数:
matrixType::~matrixType()
{
for (int i = 0; i < row1; i++){
for (int j = 0; j < col1; j++)
delete[]matrixPointer1[i][j]; //Error: Expression must have pointer type
delete[]matrixPointer1[i];
}
for (int i = 0; i < row2; i++){
for (int j = 0; j < col2; j++)
delete[]matrixPointer2[i][j]; //Error: Expression must have pointer type
delete[]matrixPointer2[i];
}
delete[]matrixPointer1;
delete[]matrixPointer2;
}
【问题讨论】:
-
既然你将
matrixPointer1定义为int**,那么就将它解引用两次(即matrixPointer1[i][j]会给你一个int,它不是一个指针类型。 -
那么释放内存的正确方法应该是什么?删除带有错误的行会导致我的程序超出范围(尽管它可以在没有析构函数的情况下工作)
-
一开始分配数组的代码在哪里?
-
现在编辑主要问题以包含“设置”功能。
-
这是您分配指针的代码。但是你实际上在哪里分配内存(即你在哪里调用
new int[][]?)