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

C++使用指针调用结构体打印方法无输出问题求解决方案

问题根源

你声明了Brok *a1结构体指针,但没有给指针分配指向的合法内存空间,属于野指针访问,是C++标准定义的未定义行为,程序运行结果完全不可预期:没有输出、崩溃、乱码都属于正常表现,你遇到的无输出但正常退出只是未定义行为的其中一种表现。

修复方案

有两种常用的修复方式:

方案1:栈上创建结构体实例,让指针指向该实例

不需要手动管理内存,适合小对象、短生命周期的使用场景:

#include <iostream>
using namespace std;

struct Brok{
    string name;
    int age;

    void pt(){
        cout << "Name : " << name << "\nAge : " << age;
    }
};

int main()
{
    Brok obj; // 栈上创建合法的结构体实例
    Brok *a1 = &obj; // 指针指向实例的地址
    a1->name = "John Wick";
    a1->age = 46;
    a1->pt();

    return 0;
}

方案2:堆上动态申请内存,使用后手动释放

适合长生命周期、大对象的使用场景,注意申请后必须调用delete释放内存避免泄漏:

#include <iostream>
using namespace std;

struct Brok{
    string name;
    int age;

    void pt(){
        cout << "Name : " << name << "\nAge : " << age;
    }
};

int main()
{
    Brok *a1 = new Brok(); // 动态申请结构体内存,指针指向合法地址
    a1->name = "John Wick";
    a1->age = 46;
    a1->pt();
    delete a1; // 释放申请的堆内存

    return 0;
}

两种方案运行后都能正常输出预期内容:

Name : John Wick
Age : 46

内容的提问来源于stack exchange,提问作者sorax

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:11