2016-01-13 202 views
0

下面的代碼工作得很好,我可以得到我想,如果我忽略了錯誤信息,一旦我運行的結果。我得到的錯誤是:調試錯誤! 程序: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

回答

2

好吧,我找出問題出在哪裏。這是因爲當你在for裏面第一次撥打電話Alphabytes.at(b/8)時,Alphabytes的大小爲零,所以你試着得到超出數組範圍的索引。與Alphabytes[b/8] = (Alphabytes[b/8] |......替換此。

+0

謝謝,似乎是這個問題... –

0

看來,在釋放模式下一切編譯,甚至沒有錯誤或警告等被檢測到,所以這很奇怪,它只發生在調試模式,所以我認爲生病報告這在QT錯誤跟蹤可能... 除非任何人可以數字爲什麼這個錯誤只發生在調試時...