C++调用output输出Bus结构体Current值为16 初始化不生效问题排查
问题排查与修复说明
根因分析
- C++ 栈上分配的普通局部结构体变量未手动初始化时,成员取值为栈内存残留的未定义脏数据,你观测到的Current为16、Max为0都是随机的运行时残留值,没有固定规律。
- 代码逻辑错误:你编写的
init初始化函数从未被调用,main函数中定义Bus s后直接调用output打印未初始化的成员,自然不符合预期。
修复方法
你可以任选以下一种方案修复:
方案1:手动调用初始化函数
在main函数中定义结构体变量后、打印前调用你写的init函数即可,修改后的main代码如下:
int main() { struct Bus s; init(s); output(s); return 0; }
方案2:给结构体添加默认构造函数(C++ 更推荐的写法)
直接给Bus结构体添加默认构造函数,定义变量时会自动完成初始化,不需要额外调用独立的初始化函数,修改后的结构体定义如下:
struct Bus { int Current; int Max; Bus() : Current(0), Max(0) {} };
该方案下原有main函数无需修改,创建s实例时会自动将成员赋值为0。
内容的提问来源于stack exchange,提问作者Aimie
相关产品推荐
相关产品推荐

