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

Alles rund um die Programmierung mit Qt
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

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

Beitrag 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.
Zuletzt geändert von BartSimpson am 28. März 2008 13:10, insgesamt 1-mal geändert.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag 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);
ConfusedSushi
Beiträge: 57
Registriert: 18. Januar 2008 16:46
Wohnort: Berlin

Beitrag 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.
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
Dateianhänge
Lottozahlen.7z
Das Projekt
(23.35 KiB) 203-mal heruntergeladen
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Der String befindet sich innerhalb eines Datenobjektes, welches aus verschiedenen Unterobjekten besteht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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 :)
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Guten Morgen:)
Danke.
An der Stelle hatte ich gar nicht nachgeschaut:(
Da ist das denn kein Wunder das es kracht:)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wenn die Pointer im ctor schön mit 0 initialisiert würden, käme man wesentlich schneller drauf.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Eine gute Idee:)
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Antworten