2

这是我接收字符串的代码。但我不知道是什么导致了问题。有人知道吗?

#include<iostream>
#include<cstring>

using namespace std;

class person{
private:
    char name[100];
   //char * name;
public:
    person(void) : name(){}
    person(person& myPerson);
    ~person(void) {delete []name;}
    void read();
    void write();
};

person::person(person& myPerson ){
        strcpy(name ,myPerson.name);
    }

void person::read(){
    cout<< "read name from console: " ;
    cin >> name;                   
}

//////// <<---- 问题点。

void person::write(){
    cout << name << endl;
}

void main(void) {
person p1;
p1.read();
//p1.write();

    getchar();   
}

//我插入“getchar()”以保持控制台窗口一段时间

4

2 回答 2

2

从. delete []name;_ person您应该只释放堆分配的内存,使用malloc()or new,而不是堆栈分配的空间,例如声明的固定大小数组char name[100]。此更改将修复您在程序退出时执行析构函数时收到的内存错误。

于 2013-10-19T02:05:17.833 回答
1

您的代码有许多错误或错误的样式。

首先,建议尽可能使用 C++ 标准库设施。所以使用std::string而不是char[SIZE].

其次,使用int main{return 0;}代替void main{}.

第三,delete [] name;会导致内存错误。您正在释放堆栈内存而不是堆内存。

最后,在我看来,类名应该以大写字母(Person)开头。

于 2013-10-19T02:36:35.757 回答