首页| 论坛| 消息

回复: QByteArray 转unsigned char * 的问题?
#6 回 20091001753 的帖子 [dafei2015 05-24 16:28]
20091001753:auto p = ba.data();(2019-05-24 09:25)
QByteArray ba;
BYTE buf[8]={0};
memcpy((void*)buf,(void*)ba.data(),ba.length());
这个方法可行的
#7 回 dafei2015 的帖子 [fsu0413 05-24 20:23]
dafei2015:QByteArray ba;      
     BYTE buf[8]={0};
     memcpy((void*)buf,(void*)ba.data(),ba.length());
这个方法可行的 (2019-05-24 16:28) 
因为QByteArray::data返回的是内部指针,QByteArray没了data就没了,所以如果想保存就要memcpy
#8 [九重水 05-27 10:08]
这个问题艾特了我呀,不好意思,医生叫我这几天卧床休息(医生说我太突出了……职业病?)一连躺了4天。
言归正传,这个问题的实质是C++浅拷贝和深层拷贝的问题(随便百度一下一堆相关内容)。
如果你一个QByteArray ba变量作为一个临时变量,data()函数返回的是一个指向其数据区的指针,ba变量的生命周期一到,内存被释放。造成原来的数据不正确。
所以,
解决方案一:要保证ba的生命周期比buf的生命周期长;
解决方案二:或者干脆一点,直接将data()指向的数据拷贝过来即可。(也就是你们在上面提到的解决方案。)
#9 回 九重水 的帖子 [dafei2015 06-17 16:07]
九重水:这个问题艾特了我呀,不好意思,医生叫我这几天卧床休息(医生说我太突出了……职业病?)一连躺了4天。
言归正传,这个问题的实质是C++浅拷贝和深层拷贝的问题(随便百度一下一堆相关内容)。
如果你一个QByteArray ba变量作为一个临时变量,data()函数返回的是一个指向 ..(2019-05-27 10:08)
谢谢啦注意身体啊兄dei

<< 1 2 >> (2/2)

回复 发表
主题 版块