Seite 1 von 1

[gelößt]Absturz bei Zugriff auf QStringList [Guten Morgen]

Verfasst: 28. März 2008 11:36
von BartSimpson
Hallo, wenn ich auf QString.split("",QString::SkipEmptyParts)
Zugreifen will stürzt das ganze Programm ab.
Unbehandelte Ausnahme bei 0x67082cd6 (QtCored4.dll) in Lottozahlen.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x558b23f3.
Laut Debugger soll in der Datei QString.cpp Zeile 2043 liegen.
Dort steht:
int QString::indexOf(const QString &str, int from, Qt::CaseSensitivity cs) const
{
const int l = d->size; <------Zeile 2043
const int sl = str.d->size;
if (from < 0)
from += l;
if (uint(sl + from) > (uint)l)
return -1;
if (!sl)
return from;
if (!l)


Ich nutze Qt 4.3.4.

Hat jemand eine Idee was da schief geht?
Wenn nötig kann ich auch das ganze Projekt schicken.

Verfasst: 28. März 2008 11:44
von PeterLustig
Wie wärs wenn du DEINE Codezeile postest, in der der Fehler auftritt?
Denn ich glaube kaum das du QString.split in deinem Code hast.

Sowas hier geht zumindest:
QString myStr = "a-b--c";

QStringList myList = str.split("-", QString::SkipEmptyParts);

Verfasst: 28. März 2008 11:55
von ConfusedSushi
ich würde mal vermuten das ein

split("",QString::SkipEmptyParts)

nicht funktionieren kann.

"abcdefg" -> wo sollen da bitte die 'empty parts' sein???

entweder du fügst ein trennzeichen ein, oder du lasst das mit den SkipEmptyParts.

Verfasst: 28. März 2008 11:57
von PeterLustig
@ ConfusedSushi
Du weißt doch garnicht welchen String er nutzt und wie er aussieht.
Und bei SkipEmptyParts ist es auch egal ob überhaupt ein Trennzeichen existiert. Das dient nur dazu, dass z. B. bei "ab--c" nur zwei Strings in der Liste stehen, und nicht ein dritter leerer in der Mitte.

Verfasst: 28. März 2008 12:04
von BartSimpson
Hallo,
Das sind alles nur Zeiger, auf QStrings.
Aber zusammengefasst sieht der Code so aus:

QString foo="1234";
QStringList baar=foo.split("",QString::SkipEmptyParts);
qDebug()<<baar;

ein einem Testprojekt geht das auch Prima.
Nur wenn man das ganze mit Zeigern macht geht es schief:(
Es werde den Code mal einpacken und genau Beschreiben, wie man zu der Stelle kommt wo es kracht. Kann ich jede ein besseres Bild machen.

Verfasst: 28. März 2008 12:11
von BartSimpson
So anbei das Projekt
Reproduzieren lässt sich das ganze wie folgt:
Wenn die Daten von der Webseite geladen sind, auf Auswertung klicken.
Dort denn alle 4 Checkboxen ankreuzen.
Die Stelle wo der Code Steht der Probleme macht ist:
Auswertung.cpp
Die Zeilen wo auf den Zeiger zugegriffen wird.

Würde mich echt freuen wenn jemand ein Fehler sieht und es nicht an Qt liegt. Der Fehler läßt sich unter Linux und Windows reproduzieren.

Verfasst: 28. März 2008 12:11
von franzf
Ist es denn unbedingt nötig, Pointer auf QStrings zu verwenden?
Schau dir mal das an, vllt. denkst du dann anders.

Grüße
Franz

Verfasst: 28. März 2008 12:28
von BartSimpson
Der String befindet sich innerhalb eines Datenobjektes, welches aus verschiedenen Unterobjekten besteht.

Verfasst: 28. März 2008 12:54
von Christian81

Code: Alles auswählen

	K_DlgAuswertung=new DlgAuswertung(K_Spielwoche,this);
	K_Webseite=new Lottoseite(this);
	K_Spielwoche=new Spielwoche();
Na was sagt uns das?

Verfasst: 28. März 2008 13:06
von solarix
Playing with pointers is like playing with fire..

Code: Alles auswählen

K_DlgInfo=new DlgInfo(this);
K_DlgAuswertung=new DlgAuswertung(K_Spielwoche,this);
K_Webseite=new Lottoseite(this);
K_Spielwoche=new Spielwoche();

Edit:
da war jemand schneller :)

Verfasst: 28. März 2008 13:09
von BartSimpson
Guten Morgen:)
Danke.
An der Stelle hatte ich gar nicht nachgeschaut:(
Da ist das denn kein Wunder das es kracht:)

Verfasst: 28. März 2008 13:15
von Christian81
Wenn die Pointer im ctor schön mit 0 initialisiert würden, käme man wesentlich schneller drauf.

Verfasst: 28. März 2008 13:32
von BartSimpson
Eine gute Idee:)

Verfasst: 28. März 2008 13:36
von macman
BartSimpson hat geschrieben:So anbei das Projekt
Ich hätte ja auch gerne gesucht, aber es funktioniert nicht, wenn man hinter einem Proxy sitzt. Kommt das noch?