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

C++中printf打印结构体成员触发Bus error的原因及解决方法

错误原因
  • 代码中的abc* xyz是未初始化的野指针,没有指向任何合法分配的struct abc类型内存空间,本身存储的地址是随机的非法值。
  • 后续xyz->b = 10的赋值操作、printf对xyz->b的读取操作,本质都是对非法内存地址的读写操作,这类内存访问违规会触发Bus Error或段错误崩溃,你遇到的报错就是该违规行为的表现。
解决方案

根据使用场景可以选择以下三种修复方案:

方案1:栈内存分配(适合短生命周期小对象,无需手动管理内存)

直接在栈上声明结构体实例,无需使用指针:

struct abc
{
    float b;
};

abc xyz;
xyz.b = 10;
printf("%f", xyz.b);

方案2:堆内存动态分配(适合长生命周期/大对象场景)

用new为指针分配合法的堆内存,使用完成后手动调用delete释放避免内存泄漏:

struct abc
{
    float b;
};

abc* xyz = new abc;
xyz->b = 10;
printf("%f", xyz->b);
delete xyz;

方案3:智能指针管理(C++11及以上版本推荐,无需手动释放内存)

使用标准库的智能指针自动管理动态内存,避免内存泄漏问题:

#include <memory>
struct abc
{
    float b;
};

auto xyz = std::make_unique<abc>();
xyz->b = 10;
printf("%f", xyz->b);
// 智能指针离开作用域后自动释放对应的堆内存

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:48:02