You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:36:03