您正在返回本地变量的地址:
char temp[30]; // ... return temp;
这是C或C++中的严格禁忌.你从Marks::name()
你的temp
变量出来的那一刻就是BOOM!您无法再访问它 - 这样做会调用未定义的行为.试试这个,
#include// somewhere at the top // ... std::string Marks::name() { std::string line; cout<<"Enter a name:"<
Andy.. 5
问题是因为名称指向的值已被破坏.您正在返回本地变量的地址
Marks::name()
.最有可能是第一个的副作用cout
是导致内容name
被破坏.当第一个cout
被注释掉时,你可能只是幸运.执行此操作的正确方法是分配一些内存,返回该内存,然后在完成后将其销毁:
char* Marks::name() { char* temp = new char[30]; cout<<"Enter a name:"<不要忘记使用
delete[]
,而不仅仅是delete
,因为否则只会释放第一个字符.
1> dirkgently..:您正在返回本地变量的地址:
char temp[30]; // ... return temp;这是C或C++中的严格禁忌.你从
Marks::name()
你的temp
变量出来的那一刻就是BOOM!您无法再访问它 - 这样做会调用未定义的行为.试试这个,#include// somewhere at the top // ... std::string Marks::name() { std::string line; cout<<"Enter a name:"<
2> Andy..:问题是因为名称指向的值已被破坏.您正在返回本地变量的地址
Marks::name()
.最有可能是第一个的副作用cout
是导致内容name
被破坏.当第一个cout
被注释掉时,你可能只是幸运.执行此操作的正确方法是分配一些内存,返回该内存,然后在完成后将其销毁:
char* Marks::name() { char* temp = new char[30]; cout<<"Enter a name:"<不要忘记使用
delete[]
,而不仅仅是delete
,因为否则只会释放第一个字符.