什么是错在我的代码?为什么错误味精

问题描述:

下面的代码工作得很好,我可以得到我想,如果我忽略了错误信息,一旦我运行的结果。我得到的错误是:调试错误! 程序:C:\ QT \ qt5.5.1 \ 5.5 \ msvc2013_64 \ BIN \ Qt5Cored.dll 模块:5.5.1 文件:全球\ qglobal.cpp 行:2966 .....什么是错在我的代码?为什么错误味精

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

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

这是正确的输出:

位是:QBitArray(0110 0011)

字节字符是 “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]); 
+0

我不确定,但我认为你应该使用'reinterpret_cast'而不是'static_cast' – Evgeny

好吧,我找出问题出在哪里。这是因为当你在for里面第一次拨打电话Alphabytes.at(b/8)时,Alphabytes的大小为零,所以你试着得到超出数组范围的索引。与Alphabytes[b/8] = (Alphabytes[b/8] |......替换此。

+0

谢谢,似乎是这个问题... –

看来,在释放模式下一切编译,甚至没有错误或警告等被检测到,所以这很奇怪,它只发生在调试模式,所以我认为生病报告这在QT错误跟踪可能... 除非任何人可以数字为什么这个错误只发生在调试时...