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

相关推荐
один but you14 分钟前
从可变参数到 emplace:现代 C++ 性能优化的核心组合
java·开发语言
MY_TEUCK1 小时前
【Java 后端 | Nacos 注册中心】微服务治理原理、选型与注册发现实战
java·开发语言·微服务
测试员周周1 小时前
【Appium 系列】第13节-混合测试执行器 — API + UI 的协同执行
开发语言·人工智能·python·功能测试·ui·appium·pytest
光泽雨2 小时前
c#中的Type类型
开发语言·前端
做人求其滴2 小时前
面试经典 150 题 380 274
c++·算法·面试·职场和发展·力扣
见叶之秋2 小时前
C++基础入门指南
开发语言·c++
计算机安禾2 小时前
【c++面向对象编程】第42篇:模板特化与偏特化:为特定类型定制实现
开发语言·c++·算法
qq_401700412 小时前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
玖釉-3 小时前
C++ 中的循环语句详解:while、do...while、for、嵌套循环与循环控制
开发语言·c++·算法
XMYX-03 小时前
37 - Go env 环境变量:配置管理与运行时控制
开发语言·golang