QList在两个函数中第一个元素值不一样

本人使用一个QList模拟队列存储字符数组,每个字符数组的大小大概在4000-14000,代码如下:
QList Package_Queue;
下列入队和出队函数中,testchar是我申明的全局变量,一个字符指针,用于测试两个函数中获取到的第一个元素是否相同。
入队函数:

    while(!queuelock->tryLock()){}
    package_head head; //数据包头
    memset(&head,0,sizeof (package_head));
memcpy(&head,package,sizeof (package_head));
Package_Queue.push_back(package);
testchar=*(Package_Queue.begin());
 qDebug()<<"enenqueue crc check"<_itu(testchar+sizeof (package_head),head.fileSize)<//对比生成的CRC校验
qDebug()<<"compare  enqueue char[]"<Package_Queue.begin() ),(package))<//对比出队的数据是否相等
emit packageQueue_new();
queuelock->unlock();
};

出队函数:

char* QueueManage::popqueue_Package_Queue(){
    while(!queuelock->tryLock()){}
    if(Package_Queue.isEmpty())
        return nullptr;
    package_head head;
    memset(&head,0,sizeof (package_head));
    char *data;
    data=Package_Queue.takeFirst();
     memcpy(&head,data,sizeof (package_head));
    qDebug()<<"pop queue crc check"<CRCCode<data+sizeof (package_head),head.packSize-sizeof (package_head))<
    qDebug()<<"compare  pop char[]"<data)<
    emit PackageQueue_pop();
    queuelock->unlock();
    return data;
};

CRC32校验的代码如下:

uint32_t QueueManage::crc32_itu(char *data, int length){
    uint8_t i;
     uint32_t crc = 0xffffffff;  // Initial value
     while(length--)
       {
        crc ^= *data; data++;
        for (i = 0; i < 8; ++i)
        {
        if (crc & 1)
          crc = (crc >> 1) ^ 0xEDB88320;// 0xEDB88320= reverse 0x04C11DB7
         else
        crc = (crc >> 1);
          }}
     return ~crc;
};

然后运行中出现了如下输出:
enenqueue crc check 698326302 698326302 //入队时,两个crc校验码相同
compare enqueue char[] 0
pop queue crc check 698326302 865988787 //出队函数中,还是原来的char指针,生成的crc校验却不同
compare pop char[] 0
但是比较第一个元素和出队的元素,又是相同的,想请教下是什么情况,怎么解决

入队函数中传给crc32_itu第二个参数是head.fileSize
出队函数中传给crc32_itu第二个参数是head.packSize-sizeof (package_head)
你确定这两个数值是一样的吗?

  • 给你找了一篇非常好的博客,你可以看看是否有帮助,链接:QT的QList类的使用
  • 同时,你还可以查看手册:qt QList 中的内容