[QT] Dereferenzieren von *QPixmap führt zu Absturz
-
Guten Tag
Ich arbeite gerade an einem Problem welches meine Kompetenzen übersteigt:
Ich programmiere mit VC++ 2008 SP1 und verwende das QT-Plugin auf WinXP 32 Bit.
In meiner Hauptklasse (abgeleitet von QMainWindow) deklariere ich eine private Variable folgendermaßen.
QPixmap *pictures[1024];
So werden die Zeiger belegt (ist etwas unschöner Code, tut mir Leid)
QDir appdir(QFileDialog::getExistingDirectory(this,"Wählen Sie ein Verzeichnis mit Bilddateien"),""); dirpics = appdir.entryInfoList(); i = dirpics.count(); j = 0; int k = 0; for(;j < i;j++) { if(dirpics[j].suffix() == "png" || dirpics[j].suffix() == "jpg") { #ifdef ME_DEBUG QMessageBox::information(this,"Meldung", "Ein Bild wurde gefunden", QMessageBox::Ok); #endif //pictures.push_back(new QPixmap(dirpics[j].absoluteFilePath())); pictures[k] = new QPixmap(dirpics[j].absoluteFilePath()); max_pics++; k++; } }
Später greife ich dann mittels Methode der selben Klasse folgendermaßen zu:
this->ui.picturebox->setPixmap(*pictures[0]);
Das alles funktioniert auch wunderbar bis ich es auf einem anderen Computer (ebenfalls WinXP 32 Bit) teste -> Crash. Dabei spielt es keine Rolle welchen der 3 computer, welche alle die aktuellste Version des VC Redistributables und alle QT-DLLs haben, probiere.
Weiß jemand was ich falsch mache?
Mfg
Machtl
-
Du nimmst an, dass dein array Pixmaps enthält. Mach es schön und verwende eine List (QList). Dann prüfen, oder der gewollte Index > liste.size(), dann gibt es keine Probleme.
-
Daran liegt es ganz bestimmt nicht da ich nur auf initialisierte arrayelemente zugreife. Wie gesagt, bei meinem Programmier-Computer funktioniert alles wunderbar.
-
Machtl schrieb:
Daran liegt es ganz bestimmt nicht da ich nur auf initialisierte arrayelemente zugreife.
Das bezweifel ich, sonst würde das nicht crashen!
Geh mal mit nem Debugger durch.
N.B.:
Wenn du auf nem fremden Rechner mittels Qt jpg-Bilder anzeigen willst, musst du auch die entsprechenden imageplugins mitliefern. Ausfürhren auf der Console schadet auch nicht.
-
Mal noch ne andere Frage: hast du auch in Release Version kompiliert?
-
l'abra d'or schrieb:
Machtl schrieb:
Daran liegt es ganz bestimmt nicht da ich nur auf initialisierte arrayelemente zugreife.
Das bezweifel ich, sonst würde das nicht crashen!
Geh mal mit nem Debugger durch.Habe ich schon auf dem Programmier-Rechner gemacht (habe nur da die nötigen Werkzeuge dazu) und es funktioniert wie gesagt alles wunderbar.
N.B.:
Wenn du auf nem fremden Rechner mittels Qt jpg-Bilder anzeigen willst, musst du auch die entsprechenden imageplugins mitliefern.Die fremden Rechner können JPG mit dem Windows Standart Programm für Bilder öffnen und anzeigen. Die betreffenden Plugins scheinen also installiert zu sein oder was genau meinst du?
Auf der Konsole ausführen? Welche Konsole?
Ja ich habe natürlich im Release Modus kompiliert.
Ich danke erstmal für eure Hilfe. Das blöde ist nur, dass ich das Programm morgen abgeben soll, stehe also ein wenig unter Zeitdruck.
Mfg
Machtl
-
Die qt-imageplugins! liegen in QTLIBDIR/plugins/imageformats
Die musst du mitliefern. Jedenfalls die die benötigt werden.
Und wenn es auf dem Programmierrechner funktioniert bringt debuggen da wohl wenig. Du kannst ja auf dem anderen Rechner (der mit dem Fehler) einen debugger installieren und mal schauen warum es da nicht funktioniet.
Debuggen wenn Fehler auftreten ist deutlich effizienter als da wo keine Fehler auftreten, jedenfalls was die Behebung der Fehler anbelangt :p