我有以下代码:
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 ***
可能出现什么问题?
答案 0 :(得分:5)
ostream& operator<<(ostream& o, Chain s) {
这不是s
的引用,它构建了一个完整的副本,可能有一个删除所用内存的析构函数。因为你两次调用它,它会被删除两次。
答案 1 :(得分:2)
您的班级Chain
很可能有一个正在销毁c
的析构函数。所以在这一行:
delete [] s.c;
您正在删除c
,然后当Chain
被删除时,它会再次尝试销毁c
以查找它已被删除且您正在进行双重免费。