删除char类型的动态分配时,析构函数会导致段错误

时间:2015-05-04 18:25:26

标签: c++ c++11

重复(概念上)

What is The Rule of Three?

我正在上课,我的作业是StringMe。我使它像C ++标准库,字符串一样工作,但在析构函数中,使用delete会导致段错误,它只发生在Linux(我使用的是Ubuntu)中,在Windows中执行时看起来很好。 这是我的代码。

stringme.h

#ifndef STRINGME_H
#define STRINGME_H

#include <iostream>

using namespace std;

class StringMe {
    char *data;

    public:
        StringMe();
        ~StringMe();
        StringMe operator =(char*);
        friend istream& operator >>(istream&, StringMe&);
        friend ostream& operator <<(ostream&, StringMe);
};

#endif

stringme.cpp

#include <iostream>
#include "StringMe.h"

StringMe::StringMe() {
    // initializing empty string
    data = new char[256]();
}

StringMe::~StringMe() {
    delete[] data; //error here
}

StringMe StringMe::operator = (char* str) {
    data = str;
}

istream& operator >>(istream& in, StringMe &str) {
    in.getline(str.data, 256);
    return in;
}
ostream& operator <<(ostream& out, StringMe str) {
    out<<str.data;
    return out;
}

的main.cpp

#include <iostream>
#include "stringme.h"

using namespace std; 

int main() {
    StringMe a;
    a = "Tran Viet Ha";
    cout<<a<<endl;
    StringMe b;
    cout<<"Enter a string: ";
    cin>>b;
    cout<<b<<endl;
}

执行时出错:

<。>`。/ main'出错:free():无效指针:0x08048beb *** 中止(核心倾销)

0 个答案:

没有答案