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
相关产品推荐
相关产品推荐

