问题描述
- 正在学c++, class内存分配的问题
-
重载
Matrix& Matrix::operator-(const Matrix &m) {
if (m.row_n != row_n||m.column_n != column_n) {
std::cout << "Size not matching, can't add!" << std::endl;
std::cout << "the left is returned" << std::endl;
return this;
}
static Matrix temp(row_n, column_n); //这里这个分配的内存什么时候删除?
temp.name = 'f';
for (int i = 0; i < row_n; i++) {
for (int j = 0; j < column_n; j++) {
temp.element[i][j] = element[i][j] - m.element[i][j];
}
}
return temp;
}
构造函数::
Matrix::Matrix() {
row_n = 2;
column_n = 2;
element = ( int *)new int* [2];
for (int i = 0; i < 2; i++) {
element[i] = new int2;
element[i][i] = 1;
}
row_n = 2;
column_n = 2;
}重载
Matrix& Matrix::operator=(const Matrix &mp) {
row_n = mp.row_n;
column_n = mp.column_n;
for (int i = 0; i < row_n; i++) {
delete[] element[i];
}
delete[] element;
element = (int **)new int*[mp.row_n];
for (int i = 0; i < column_n; i++)
element[i] = new int[mp.column_n];
for (int i = 0; i < row_n; i++)
for (int j = 0; j < column_n; j++)
element[i][j] = mp.element[i][j];
return *this;
}使用::
Matrix ma1, temp;
temp = ma1 - ma5;
错误::
*** Error in `./temp': double free or corruption (out): 0x0000000000f62090 ***
已放弃 (核心已转储)
一直找不到原因,希望高手能指点一下
解决方案
double free就是你的代码有多次重复是否同一个指针。
operator中没必要是否mp的指针,而是的放到析构函数中。
解决方案二:
你这个是编译器静态分配的,又是静态变量,永远都不会被删除
只有new malloc分配的才谈得上删除,静态分配在堆栈上的会在函数退出的时候析构
解决方案三:
请问那应该怎样分配才能保证重载的"="赋值成功, 因为这个局部的对象的内存也是动态分配的,
,还有那个error什么意思,不明白