当前位置: 首页 > news >正文

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码

#include <QCoreApplication>#pragma pack(push, 1)
typedef struct
{int a;		// 4字节float b;	// 4字节char c;		// 1字节int *d;		// 8字节
}testStruct;
#pragma pack(pop)#include <QByteArray>
#include <QDebug>int main()
{testStruct structA;structA.a = 1;structA.b = 2;structA.c = 'a';structA.d = new int[10];for (int i = 0; i < 10; ++i) {structA.d[i] = i;}QByteArray arr;arr.resize(49);memcpy(arr.data(), &structA, 9);memcpy(arr.data() + 9, structA.d, 40);testStruct *sb = reinterpret_cast<testStruct *>(arr.data());sb->d = reinterpret_cast<int *>(arr.data() + 9);for (int i = 0; i < 10; ++i) {qDebug() << sb->d[i];}return 0;
}

输出结果

40642209
0
2
3
4
5
6
7
8
9

2、调试过程1

经过调试指针转换后,发现本来设置的1字节对其变成了4字节对齐
QBytearray的data()指针被转换后会按照4字节自动对齐填充,不知为何会这样
在这里插入图片描述>在这里插入图片描述

3、调试过程2

当我采用系统默认的8字节对齐后,又发现无法正确的对结构体内指针进行赋值
下面这行代码,按理来说指针赋值,sb->d应该指向arr.data() + 16的地址上

typedef struct
{int a;		// 4字节float b;	// 4字节char c;		// 8字节int *d;		// 8字节
}testStruct;
sb->d = reinterpret_cast<int *>(arr.data() + 16);;

但实际上出现了一个奇怪的现象,在arr.data() + 16 的内存起始地址上,莫名填充了8个字节,而这8个字节恰好就是自己的内存地址??????
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中00 00 00 00 00 f6 43 48 等于 16139080,输出的第一个值正好为自己的地址
由此得出,结构体指针的赋值会将值和地址一并一起赋值?匪夷所思

4、测试代码

测试一下,对于原始的char* c指针是否也有这样的情况

#include <QCoreApplication>#pragma pack(push, 1)
typedef struct
{int a;float b;char c;int *d;
}testStruct;
#pragma pack(pop)#include <QByteArray>
#include <QDebug>int main()
{testStruct structA;structA.a = 1;structA.b = 2;structA.c = 'a';structA.d = new int[10];for (int i = 0; i < 10; ++i) {structA.d[i] = i;}QByteArray arr;arr.resize(49);memcpy(arr.data(), &structA, 9);memcpy(arr.data() + 9, structA.d, 40);testStruct *sb = reinterpret_cast<testStruct*>(arr.data());// 分配一片char数组,假设我们需要存储3个floatchar *charBuffer = new char[10 * sizeof(int)];// 假设填充一些数据int exampleData[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};memcpy(charBuffer, exampleData, 10 * sizeof(int));sb->d = reinterpret_cast<int*>(charBuffer);// (*sb).d = reinterpret_cast<int*>(arr.data() + 16);for (int i = 0; i < 10; ++i) {qDebug() << sb->d[i];}return 0;
}

输出正常,给我整得一头雾水

5、问题解析

最后思来想去,终于发现了问题所在
结构体指针sb->d和需要解析的数据块在同一块内存地址,地址空间重合了!!!

在给sb->d的值赋值时,其实就是修改sb->d所在内存空间的8个字节为新的地址0x12345678,但是这块地址又和自己的数据地址重合了,所以导致了数据地址的前8个字节被覆盖

相关文章:

QT将QBytearray的data()指针赋值给结构体指针变量后数据不正确的问题

1、问题代码 #include <QCoreApplication>#pragma pack(push, 1) typedef struct {int a; // 4字节float b; // 4字节char c; // 1字节int *d; // 8字节 }testStruct; #pragma pack(pop)#include <QByteArray> #include <QDebug>int main() {testStruct …...

修改银河麒麟操作系统V10(SP1)网卡名称为ethx

修改银河麒麟桌面操作系统V10&#xff08;SP1&#xff09;网卡名称为ethx 步骤一&#xff1a;查看当前网卡信息步骤二&#xff1a;修改GRUB配置文件步骤三&#xff1a;更新GRUB配置步骤四&#xff1a;编辑网络接口文件步骤五&#xff1a;重启机器 &#x1f496;The Begin&#…...

MySQL多表查询:标量子查询

先看我的emp表结构 emp表 子查询基本语法 select * from t1 where column1 (select column1 from t2);例子1&#xff1a;查询"销售部" 的所有员工信息 这个可以先拆解为两个 a.查询"销售部"的部门ID select id from dept where name 销售部; b. 根…...

C++学习笔记----8、掌握类与对象(六)---- 操作符重载(1)

经常在对象上执行如相加&#xff0c;比较&#xff0c;文件传输等操作。例如&#xff0c;spreadsheet只有在可以在上面执行自述运算才有用&#xff0c;比如对整行的单元格求和。所有这些都可以通过重载操作符来完成。 许多人发现操作符重载的语法复杂而令人迷惑。至少一开始是这…...

Ascend C 自定义算子开发:高效的算子实现

Ascend C 自定义算子开发&#xff1a;高效的算子实现 在 Ascend C 平台上&#xff0c;开发自定义算子能够充分发挥硬件的性能优势&#xff0c;帮助开发者针对不同的应用场景进行优化。本文将以 AddCustom 算子为例&#xff0c;介绍 Ascend C 中自定义算子的开发流程及关键技术…...

面向对象技术——设计模式

目录 层次结构 具体设计模式分类 创建型模式&#xff08;处理创建对象&#xff09; 结构型模式&#xff08;处理类和对象的组合&#xff09; 行为型模式&#xff08;描述类或者对象的交互行为&#xff09; 创建型设计模式 ​编辑 结构型设计模式 行为型设计模式​编辑 …...

2024 Mysql基础与进阶操作系列之MySQL触发器详解(20)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]

欢迎各位彦祖与热巴畅游本人专栏与博客 你的三连是我最大的动力 以下图片仅代表专栏特色 [点击箭头指向的专栏名即可闪现] 专栏跑道一 ➡️ MYSQL REDIS Advance operation 专栏跑道二➡️ 24 Network Security -LJS ​ ​ ​ 专栏跑道三 ➡️HCIP&#xff1b;H3C-SE;CCIP——…...

找不到concrt140.dll如何修复,快来试试这6种解决方法

concrt140.dll是微软Visual C 2015 Redistributable Package中的一个重要动态链接库文件&#xff0c;它在许多Windows应用程序中扮演着关键角色。本文将详细探讨concrt140.dll丢失的原因、影响、解决方法以及预防措施&#xff0c;帮助用户更好地理解和应对这一问题。 一、什么是…...

年会工作会议会务报名签到小程序开源版开发

年会工作会议会务报名签到小程序开源版开发 会议管理微信小程序&#xff0c;对会议流程、开支、数量、标准、供应商提供一种标准化的管理方法。以达到量化成本节约&#xff0c;风险缓解和服务质量提升的目的。适用于大型论坛、峰会、学术会议、政府大会、合作伙伴大会、经销商…...

UE C++ 实时加载模型的总结

一.总体思路&#xff1a; 如果实时加载UE模型&#xff0c;需要先将之前的模型删除。再生成出来&#xff0c;放在根节点&#xff0c;保持相对位置&#xff0c;相对的俯仰角。 void AAirForce::LoadWeapon(int ID, int Type, double X, double Y, double Z) {//m_weaponMap.Emp…...

实施威胁暴露管理、降低网络风险暴露的最佳实践

随着传统漏洞管理的发展&#xff0c;TEM 解决了因攻击面扩大和安全工具分散而产生的巨大风险。 主动式 TEM 方法优先考虑风险并与现有安全工具无缝集成&#xff0c;使组织能够在威胁被有效利用之前缓解威胁。 为什么威胁暴露管理 (TEM) 在现代网络安全策略中变得至关重要&…...

51.哀家要长脑子了!

1.P1003 [NOIP2011 提高组] 铺地毯​​​​​​ 重复 模拟 要求覆盖在最上面的地毯编号&#xff0c;用四个数组abgk分别记录地毯起点的左下角横纵坐标&#xff0c;地毯的长度宽度&#xff0c;输入的坐标x y 当它满足大于等于左下角坐标 并且 小于等于 地毯左下角横纵坐标的时候…...

Overleaf 无法显示图片

问题描述 在Overleaf中的代码为&#xff1a; \begin{figure}\centering\includegraphics[width0.98\linewidth]{figures/test.png}\caption{This is a test.}\label{fig:test} \end{figure}但无法正常显示图片&#xff1a; 解决方案 修改编译模式为正常Normal而非快速Fast …...

如何实现 C/C++ 与 Python 的通信?

在现代编程中&#xff0c;C/C与Python的通信已经成为一种趋势&#xff0c;尤其是在需要高性能和灵活性的场景中。本文将深入探讨如何实现这两者之间的互通&#xff0c;包括基础和高级方法&#xff0c;帮助大家在混合编程中游刃有余。 C/C 调用 Python&#xff08;基础篇&#…...

音视频入门基础:FLV专题(13)——FFmpeg源码中,解析任意Type值的SCRIPTDATAVALUE类型的实现

一、SCRIPTDATAVALUE类型 从《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中可以知道&#xff0c;根据《video_file_format_spec_v10_1.pdf》第80到81页&#xff0c;SCRIPTDATAVALUE类型由一个8位&#xff08;1字节&#xff09;的Type和…...

jvm里的metaspace oom 排查问题思路-使用MAT

文章目录 metapace oom 问题排查点-1-duplicate class 数量排查点-2-classloader 数量一些可能迷惑人的方向 metapace oom 问题 metapace 问题都是由加载的class 太多&#xff0c;导致内存不够报出来的。 排查点-1-duplicate class 数量 首先看这里&#xff0c;通常一个clas…...

2025舜宇招聘【内推码】

【2025内推码】 DSwNQ9yu DSJXN8Mr 舜宇集团2025届全球校园招聘正式启动&#xff01;&#xff01;&#xff01; 专业需求&#xff1a;机械、自动化、电子、电气、通信、控制、测控、计算机、软件、物理、光学等专业&#xff1b; 工作地点&#xff1a;宁波余姚、浙江杭州、广东…...

APP自动化搭建与应用

APP自动化环境搭建 用于做APP端UI自动化&#xff0c;adb连接手机设备。 需要的工具java编辑器&#xff1a;jdk、Android-sdk软件开发工具组、appium的python客户端、nodes.js、夜神模拟器、apk包、uiautomatorviewer 第一步&#xff1a;安装sdk&#xff0c;里面包含建立工具bu…...

kafka-windows集群部署

kafka-windows集群部署目录 文章目录 kafka-windows集群部署目录前言一、复制出来四个kafka文件夹二、修改集群每个kafka的配置文件四、启动zookeeper&#xff0c;kafka集群 前言 部署本文步骤可以先阅读这一篇博客&#xff0c;这篇是关于单机kafka部署测试的。本文用到的文件…...

4个顶级的大模型推理引擎

LLM 在文本生成应用中表现出色&#xff0c;例如具有高理解度和流畅度的聊天和代码完成模型。然而&#xff0c;它们的庞大规模也给推理带来了挑战。基本推理速度很慢&#xff0c;因为 LLM 会逐个生成文本标记&#xff0c;需要对每个下一个标记进行重复调用。随着输入序列的增长&…...

告别盲测!用Arduino UNO和VL6180X做个桌面防撞小助手(OLED实时显示距离)

用Arduino UNO和VL6180X打造智能桌面防撞系统 每次在办公桌上不小心碰倒水杯或手机从桌边滑落时&#xff0c;那种手忙脚乱的场景想必大家都不陌生。今天我们就来解决这个日常小烦恼——利用Arduino UNO开发板和VL6180X传感器&#xff0c;配合OLED显示屏&#xff0c;制作一个能实…...

如何快速掌握Pixel设备刷机:新手完整教程与PixelFlasher刷机工具指南

如何快速掌握Pixel设备刷机&#xff1a;新手完整教程与PixelFlasher刷机工具指南 【免费下载链接】PixelFlasher Pixel™ phone flashing GUI utility with features. 项目地址: https://gitcode.com/gh_mirrors/pi/PixelFlasher 你是否曾经因为复杂的命令行刷机操作而感…...

5分钟学会LDDC:让每一首歌都有完美歌词的终极指南

5分钟学会LDDC&#xff1a;让每一首歌都有完美歌词的终极指南 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地址: …...

百考通AI:答辩PPT智能生成,覆盖从开题到终答的全流程,让毕业答辩更从容

毕业答辩是学术生涯的关键一战&#xff0c;一份逻辑清晰、专业美观的PPT是顺利通关的核心保障&#xff0c;却也让无数毕业生熬夜奋战&#xff1a;从提炼研究核心到规划答辩流程&#xff0c;从设计页面排版到打磨讲稿&#xff0c;繁琐的准备工作常常让人焦头烂额。百考通AI&…...

企业知识资产化的三步走路线

企业知识资产化的三步走路线品质工程师老张每周一最头疼的事&#xff0c;就是准备品质例会的周报。上周的例会上&#xff0c;生产总监随口问了一句&#xff1a;“B12产线上个月出现的表面缺陷&#xff0c;之前有没有类似的案例&#xff1f;处理结果怎么样&#xff1f;”老张当场…...

暗黑3终极自动化助手:D3KeyHelper图形化宏工具完全指南

暗黑3终极自动化助手&#xff1a;D3KeyHelper图形化宏工具完全指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面&#xff0c;可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中频繁按键导致…...

3分钟掌握智慧职教刷课脚本:全平台自动学习解决方案

3分钟掌握智慧职教刷课脚本&#xff1a;全平台自动学习解决方案 【免费下载链接】auto-play-course 简单好用的刷课脚本[支持平台:职教云,智慧职教,资源库] 项目地址: https://gitcode.com/gh_mirrors/hc/auto-play-course 还在为重复的网课学习任务烦恼吗&#xff1f;智…...

如何高效下载AnyFlip电子书:一键转换为PDF的完整指南

如何高效下载AnyFlip电子书&#xff1a;一键转换为PDF的完整指南 【免费下载链接】anyflip-downloader Download anyflip books as PDF 项目地址: https://gitcode.com/gh_mirrors/an/anyflip-downloader 你是否曾在AnyFlip上找到一本精彩的电子书&#xff0c;想要永久保…...

如何验证代理IP纯净度?2026年IP检测与优化指南

一个“脏”IP&#xff0c;如同一个有问题的身份证&#xff0c;它可能会让你的账户面临高风险&#xff0c;甚至被平台封禁。为了避免这种情况&#xff0c;验证和优化代理IP的纯净度成为了不可忽视的环节。本文将为你提供一套2026年最新的代理IP纯净度检测与优化方案&#xff0c;…...

如何用嘎嘎降AI处理法学论文:法学毕业论文降AI4.8元完整操作教程

如何用嘎嘎降AI处理法学论文&#xff1a;法学毕业论文降AI4.8元完整操作教程 关于法学论文降AI教程&#xff0c;有几个细节提前知道能少走很多弯路。 核心用嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;4.8元&#xff0c;达标率99.26%。这篇把容易忽略的…...