我的代码中有什么问题?为什么错误消息

时间:2016-01-13 17:07:39

标签: c++ qt qbytearray

下面的代码工作正常我可以得到我想要的结果,如果我运行它后忽略错误消息。我得到的错误是:调试错误! 程序:C:\ QT \ qt5.5.1 \ 5.5 \ msvc2013_64 \ BIN \ Qt5Cored.dll 模块:5.5.1 文件:global \ qglobal.cpp 行:2966 .....

如果我选择忽略错误,控制台应用程序正确显示所有数据,它显示正确的位数组,它也显示二进制数组的正确字符,最后它还给字节字符的正确字节十进制值...

这是控制台中的错误:  ASSERT:文件c:\ work \ build \ qt5_workdir \ w \ s \ qtbase \ sr中的“uint(i)< uint(size())” c \ corelib \ tools \ qbytearray.h,第464行

这是正确的输出:

比特是:QBitArray(0110 0011)

Byte Char是“c”

十进制格式字节为:99

使用的代码:

    QBitArray Alphabits(8);
    Alphabits[0] = false;
    Alphabits[1] = true;
    Alphabits[2] = true;
    Alphabits[3] = false;
    Alphabits[4] = false;
    Alphabits[5] = false;
    Alphabits[6] = true;
    Alphabits[7] = true;

    QByteArray Alphabytes;
    // Convert from QBitArray to QByteArray
    for(int b=0; b<Alphabits.count();++b) {
        Alphabytes[b/8] = (Alphabytes.at(b/8) | ((Alphabits[b]?1:0)<<(7-(b%8))));
    }

    qDebug() << "Bits are:" << Alphabits;
    qDebug() << "Byte Char is" << Alphabytes;
    qDebug() << "Decimal format Bytes are: "<< static_cast<quint8>(Alphabytes[0]);

2 个答案:

答案 0 :(得分:2)

好的,我知道问题出在哪里。这是因为当您for内部第一次调用Alphabytes.at(b/8)时,Alphabytes的大小为零,因此您尝试获取超出数组范围的索引。将其替换为Alphabytes[b/8] = (Alphabytes[b/8] |......

答案 1 :(得分:0)

似乎在发布模式下,所有内容都会编译,甚至没有检测到任何错误或警告等,所以这很奇怪它只发生在调试模式下,所以我认为在QT bug跟踪中可能会报告这个... 除非有人能够弄清楚为什么这个错误只在调试时发生......