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

相关推荐
瑞码空间5 分钟前
Java 图形界面(GUI)完整知识点手册
java·开发语言·图形界面·swing
小努蛋41 分钟前
linux编译openresty异常问题,lua_cjson.c:706:5: 错误: ‘for‘ 循环初始化声明只在 C99 或 C++ 模式下允许
开发语言·lua·openresty
qz_Serene1 小时前
C++:类和对象(上)
开发语言·c++
西安景驰电子1 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
ctlover2 小时前
Python文件操作
开发语言·python
luj_17682 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
wuyk5552 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
郝学胜-神的一滴2 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
hetao17338373 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
weixin_383196473 小时前
java基础面试题@Autowired和@Resource区别
java·开发语言