重复(概念上):
我正在上课,我的作业是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 *** 中止(核心倾销)