记录一个C++ Windows程序移植到Linux系统的bug

先看我的代码使用方法:

cpp 复制代码
struct SGM_SUM_MAX
{//求取标准差、平均值、中误差的必要条件
	double Sgm = 0;//标准差
	double Sum = 0;//平均值
	double Max = 0;//最大值
};

//我在后续使用的时候,是这么使用的(错误示范)
	SGM_SUM_MAX TIP_PixX_ZPH;
	SGM_SUM_MAX TIP_PixY_ZPH;
	SGM_SUM_MAX TIP_PixAll_ZPH;

下面代码省略...

上面这段代码在windows和Linux编译都没有问题,但是在最终使用这个结构体的时候,Linux会出现数值异常。

正确的使用应该如下定义

cpp 复制代码
struct SGM_SUM_MAX
{//求取标准差、平均值、中误差的必要条件
	double Sgm = 0;//标准差
	double Sum = 0;//平均值
	double Max = 0;//最大值
};

//更改下面的这种定义方式,输出的结果正确,结构体里面的归零不知道为啥不能正确归零,在X86、Arm64 linux系统都必须这样归零定义。
	SGM_SUM_MAX TIP_PixX_ZPH = {0,0,0};
	SGM_SUM_MAX TIP_PixY_ZPH = {0,0,0};
	SGM_SUM_MAX TIP_PixAll_ZPH = {0,0,0};

下面代码省略...

总结一点:在linux代码中自定义的结构体初始化,必须在定义的时候手动归零,结构体内部的归零可能有问题。

相关推荐
weixin_460443561 分钟前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
Cc.Y3 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
sm_926787054 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev4 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209994 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说4 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha4 小时前
Lambda 表达式和函数式接口
java·开发语言
小白学大数据4 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
colinu4 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++
学逆向的5 小时前
win32注入代码
开发语言·网络安全·api·win32