如何通过C++类方法打印string*成员并修复代码段错误问题
错误原因
- 构造函数参数
string nm是值传递的局部临时变量,在构造函数执行结束后就会被销毁,你给name赋值的&nm是指向已被回收的栈内存的野指针,后续print()方法解引用这个野指针时直接触发段错误。 - 类的默认成员访问权限是private,你当前的构造函数和
print()方法都是私有成员,外部无法直接调用,这也是编译阶段就会触发的问题。 main()函数的标准返回值类型是int,你写的无返回值写法不符合C++标准。
修复方案(保留string* name字段)
修改逻辑:在堆上申请独立的string对象存储名字,保证指针指向的内存生命周期和Person对象一致,同时修正访问权限和语法问题,完整可运行代码如下:
#include <iostream> #include <string> using namespace std; class Person { private: string* name; public: // 构造函数参数用const引用避免不必要拷贝,堆上分配新的string存储名字 Person(const string& nm) { name = new string(nm); } // 补充析构函数释放内存,避免内存泄漏 ~Person() { delete name; } void print() { cout << "That name: " << *name << endl; } }; int main() { Person first("Jack"); first.print(); return 0; }
内容的提问来源于stack exchange,提问作者Tommy0930
相关产品推荐
相关产品推荐

