OzhangsenO
catik
采纳率83.3%
2015-04-06 14:28 阅读 1.7k

c++类的对象中分配的内存的内存能不能在在程序中间delete掉再重新分配?

Matrix& Matrix::operator=(const Matrix &mp) {
if (mp.row_n != row_n||mp.column_n != column_n) {
std::cout << "Error , size not match" << std::endl;
return this;
}
/

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;
}

注释中的那一句加上之后程序就报错说*** Error in `./temp': double free or corruption (out): 0x0000000000caf1d0 ***



  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • 已采纳
    lx624909677 lx624909677 2015-04-07 01:48

    当然可以了,指针指向的区域,可以释放掉再从新分配的

    点赞 评论 复制链接分享
  • bdmh bdmh 2015-04-06 21:44

    估计是你的delete放的地不对,还没new,就delete,肯定错,至少可以先判断一下,指针是否可用

    点赞 1 评论 复制链接分享
  • 91program 91program 2015-04-06 23:29

    一个简单的解决之法,在 delete 之后被被 delete 的对象赋值为空,即 NULL。
    每次 delete 之前判断要 delete 的对象是否为空?如果不为空则释放,否则不释放。

    点赞 1 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2015-04-06 14:45

    delete只能delete一次,之后这个指针指向的内存就无效了,至于再分配是不是还是在那个内存区域这个不一定。
    你可以对再用new重新申请,传给指针变量。new后又可以delete了,如此反复。

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2015-04-06 15:22

    当然可以delete释放后再次new分配
    你的问题是释放了同一个指针多次。

    点赞 评论 复制链接分享

相关推荐