list队列数据覆盖问题

6 篇文章 0 订阅
1 篇文章 0 订阅
大概花了5个小时才解决,在这记录一下,问题是这样的。有两串数据向队列里写。第二条的数据会覆盖第一条。导致取出来的时候,数据不对,是因为我在接收端用了Qt中QByteArray的


fromRawData这个函数转换。官方描述是这样

Constructs a QByteArray that uses the first size bytes of the data array. The bytes are not copied. The QByteArray will contain the data pointer. The caller guarantees that data will not be deleted or modified as long as this QByteArray and any copies of it exist that have not been modified. In other words, because QByteArray is an implicitly shared class and the instance returned by this function contains the data pointer, the caller must not delete data or modify it directly as long as the returned QByteArray and any copies exist. However, QByteArray does not take ownership of data, so the QByteArraydestructor will never delete the raw data, even when the last QByteArray referring to data is destroyed.

调用者不能直接删除数据或修改它只要返回QByteArray和任何副本的存在

配合这次出现的问题,意思是说,队列中的地址还是转换前的data的地址,所以会出现队列中的数据出错。

解决的办法:

用QByteArray的构造函数把char*转成QByteArray.因为是深复制。所以队列的数据的地址不会是char*时的地址。

总结:遇到问题,要多debug.单步跟踪。看出错的数据产生的变化,这样更好定位。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值