Seite 1 von 1

[gelöst]QBitArray kann kein einzelnes Bit testen

Verfasst: 24. Dezember 2007 00:42
von twessels
Hi,
ich glaube meine Qt4.3-Linux-Version hat einen Bug. Könnte es vielleicht mal kurz jemand testen? Weil unter Windows läufts ohne Probleme...

Code: Alles auswählen

#include <QCoreApplication>
#include <QBitArray>

int main( int argc, char **argv )
{
	QCoreApplication app(argc, argv);
	QBitArray ba(1);
	ba.setBit(0,true);
	ba.setBit(1,false);
	
	if(ba.testBit(0) && !ba.testBit(1))
		qDebug("they are unequal!");
	
	return app.exec();
}
~/Desktop/bitarray$ ./bitarray
ASSERT: "i >= 0 && i < size()" in file /usr/include/qt4/QtCore/qbitarray.h, line 107
Aborted (core dumped)

Verfasst: 24. Dezember 2007 08:35
von upsala
Du gibst eine Größe von einem Bit vor und willst 2 Bit bearbeiten?

Verfasst: 24. Dezember 2007 12:43
von twessels
nein, das war nur ein Beispiel
statt

Code: Alles auswählen

if(ba.testBit(0) && !ba.testBit(1)) 
hätte ich auch

Code: Alles auswählen

if(ba.testBit(0))
schreiben können. Es macht aber keinen Unterschied...

Falls du

Code: Alles auswählen

 QBitArray ba(1);
meinst. Es erzeugt sehr wohl 2 Bits ba[0] und ba[1] :)

Verfasst: 24. Dezember 2007 13:09
von slash-ex
nein, eigentlich dürfte es nur ein bit erzeugen! am index 0.... :roll: manchmal stürzt das dann bei zugriffen auf den nächsten bereich ab, manchmal nicht... bei solchen primitiven speciher-strukturen fällt das nur nicht so sehr ins gewicht.

Verfasst: 24. Dezember 2007 13:24
von upsala
ASSERT: "i >= 0 && i < size()"
Man sollte halt mal die Fehlermeldung richtig lesen.

Und die Anwendung stürzt nicht ab, sie wird von der Qt-Bibliothek wegen einer ungültigen Operation beendet und zwar mittels Q_ASSERT...

Verfasst: 25. Dezember 2007 15:28
von twessels
Danke. Ihr hattet doch Recht, es lag an der Array-Größe.
Ich hatte jetzt schon öfters das Problem, dass das Kompilieren unter Linux schwerer fällt als unter Windows. gcc ist da wohl strikter eingestellt

so long...