【发布时间】:2016-03-16 11:03:17
【问题描述】:
我得到一个错误“munmap_chunk(): invalid pointer”,我不知道为什么。当我使用MultipliedByMatrix 方法时出现问题。它无法正确删除在此方法中创建的矩阵。
#include "matrix.h"
Matrix::Matrix(int matr_size) {
size = matr_size;
Matr = new int *[size];
for(int i = 0; i < size; i++)
Matr[i] = new int[size];
for(int i = 0 ; i < size; i++)
for(int j = 0; j < size; j++)
Matr[i][j] = rand() % 100;
std::cout << "New matrix is created" << std::endl;
}
Matrix::~Matrix() {
for(int i = 0; i < size; i++)
delete[] Matr[i];
delete[] Matr;
Matr = NULL;
std::cout << "Matrix is deleted" << std::endl;
}
Matrix Matrix::MultipliedByMatrix(Matrix OtherMatr) {
Matrix new_matr = Matrix(this->GetSize());
int new_value;
for(int i = 0 ; i < size; i++)
for(int j = 0; j < size; j++) {
new_value = 0;
new_value += Matr[j][i] * OtherMatr.GetValue(i, j);
new_matr.SetValue(i, j, new_value);
}
return new_matr;
}
int Matrix::GetSize() {
return size;
}
int Matrix::GetValue(int i, int j) {
return Matr[i][j];
}
void Matrix::SetValue(int i, int j, int value) {
Matr[i][j] = value;
}
【问题讨论】:
-
您可能会在这里找到帮助:stackoverflow.com/questions/6199729/…
-
@nos 不,我没有。那我应该在哪里使用呢?
-
我认为您需要一个复制构造函数来复制
Matr数组。默认的复制构造函数只会复制Matr指针,当临时的new_matr被销毁时,该指针变得无效。 -
如果
MultipliedByMatrix返回Matrix*会更简单、更高效。它可以使用Matrix *new_matr = new Matrix(this->GetSize())分配它并返回该指针,而无需复制所有内容。 -
要将您的示例代码变成MCVE,您需要将
matrix.h和合适的main()内联到您的代码中。然后人们将能够编译和运行(确保它可以自行构建 - 您需要至少包含一个标准头文件)。当您有一个演示问题的最小独立程序时,请编辑您的帖子。