记录一个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代码中自定义的结构体初始化,必须在定义的时候手动归零,结构体内部的归零可能有问题。

相关推荐
txzrxz14 分钟前
数论:排列数、组合数、费马小定理、逆元、同余定理
c++·算法·数论·组合数·费马小定理·逆元·排列数
520拼好饭被践踏18 分钟前
JAVA+Agent学习day22
java·开发语言·后端·学习
笨蛋不要掉眼泪29 分钟前
Java虚拟机:堆的参数配置
java·开发语言·jvm
冰暮流星35 分钟前
javascript之date对象
开发语言·javascript·ecmascript
Wang's Blog1 小时前
Go-Zero项目开发17: IM私聊功能实现与消息存储设计
开发语言·后端·golang
Ulyanov1 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计
开发语言·python·微服务·云原生·架构·雷达电子对抗
IT方大同1 小时前
C语言分支与循环语句
c语言·开发语言·算法
库克克2 小时前
【C++】STL 库
c++
长不胖的路人甲2 小时前
斐波那契查找Java 实现 + 完整思路
java·开发语言
星恒随风2 小时前
C++ 继承进阶:默认成员函数、多继承、虚继承与组合设计
开发语言·c++·笔记·学习