运行此c ++脚本后,为什么会出现:double free或corruption(top)?

时间:2015-11-02 20:39:47

标签: c++ debugging

我有以下代码:

Class Chain

char* c; 

作为唯一的公开分析

istream& operator>>(istream& i, Chain& s) {
  delete [] s.c;
  const int L = 256;
  char *t = new char[L];
  i.getline(t,L);
  s.c = t;
  return i;
}

ostream& operator<<(ostream& o, Chain s) {
  o << s.c;
  return o;
}

#include <iostream>
#include "Chain.h"
using namespace std;

int main(){

      Chain id;

      cin >> id;

      cout << id;
      cout << id;

在Xubuntu上运行Eclipse IDE下的代码(最新版本)后,我收到以下错误:

  

双重免费或损坏中的错误(上):0x00000000008fd290 ***

可能出现什么问题?

2 个答案:

答案 0 :(得分:5)

ostream& operator<<(ostream& o, Chain s) {

这不是s的引用,它构建了一个完整的副本,可能有一个删除所用内存的析构函数。因为你两次调用它,它会被删除两次。

答案 1 :(得分:2)

您的班级Chain很可能有一个正在销毁c的析构函数。所以在这一行:

delete [] s.c;

您正在删除c,然后当Chain被删除时,它会再次尝试销毁c以查找它已被删除且您正在进行双重免费。