catik 2015-04-06 13:18 采纳率: 0%
浏览 1606
已采纳

正在学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 ***
已放弃 (核心已转储)
一直找不到原因,希望高手能指点一下

  • 写回答

3条回答 默认 最新

  • oyljerry 2015-04-06 13:43
    关注

    double free就是你的代码有多次重复是否同一个指针。
    operator中没必要是否mp的指针,而是的放到析构函数中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入