Bug in QBitArray
Verfasst: 5. November 2009 10:37
Hi,
mir ist ein Problem aufgefallen, dass nur eintritt, wenn folgende Bedingungen erfüllt sind:
1. wenn man ein QBitArray verkleinert auf ein nicht durch 8 teilbaren Wert, d.h. es sind überzählige Bits im letzten Byte
2. es mind. 1 dieser überzähligen Bits vorher gesetzt war
3. das QBitArray über ein QDataStream neu gelesen wird
tritt offensichtlich ein Lesefehler auf und man erhält ein QBitArray der Größe 0.
Der folgende Code verdeutlicht dies:
Die überzähligen Bits bleiben auch nach einer Zuweisung oder Neuerzeugung (ba_2 = ba_1 bzw. QBitArray ba_2(ba_1) ) erhalten. Dieses Problem lässt sich umgehen, indem man vor dem resize() (oder truncate() ) alle überzähligen Bits löscht, z.B. mit:
fill( false, newSize, oldSize)
Wie gesagt, Probleme treten erst nach dem Auslesen aus einem Stream auf (z.B. aus Datei lesen), sonst sind oben besagte Bits nicht relevant.
Ich hoffe, ich hab nix übersehen - vielen Dank für Hinweise im Vorraus
mir ist ein Problem aufgefallen, dass nur eintritt, wenn folgende Bedingungen erfüllt sind:
1. wenn man ein QBitArray verkleinert auf ein nicht durch 8 teilbaren Wert, d.h. es sind überzählige Bits im letzten Byte
2. es mind. 1 dieser überzähligen Bits vorher gesetzt war
3. das QBitArray über ein QDataStream neu gelesen wird
tritt offensichtlich ein Lesefehler auf und man erhält ein QBitArray der Größe 0.
Der folgende Code verdeutlicht dies:
Code: Alles auswählen
QBitArray ba_1(20, true), ba_2;
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream stream(&buffer);
ba_1.resize(ba_1.size()-1);
stream << ba_1;
buffer.seek(0);
stream >> ba_2;
qDebug() << ba_2.size();
fill( false, newSize, oldSize)
Wie gesagt, Probleme treten erst nach dem Auslesen aus einem Stream auf (z.B. aus Datei lesen), sonst sind oben besagte Bits nicht relevant.
Ich hoffe, ich hab nix übersehen - vielen Dank für Hinweise im Vorraus