我得到了以下代码:
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***
可能出了什么问题?
ostream& operator<<(ostream& o, Chain s) {
这不是对s
的引用,它正在构建一个完整的副本,该副本可能有一个析构函数来删除所使用的内存。既然你调用了两次,它就会被删除两次。
类Chain
很可能有一个正在销毁c
的析构函数。所以在这一行:
delete [] s.c;
您正在删除c
,然后当Chain
被删除时,它再次尝试销毁c
,发现它已经被删除,并且您正在进行双重释放。