为什么我得到:双重免费或腐败(顶部)后运行这个c++脚本



我得到了以下代码:

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,发现它已经被删除,并且您正在进行双重释放。

最新更新