Seite 1 von 1
QFtp - Objekt löschen
Verfasst: 4. Dezember 2005 17:23
von Saiyaman
Hallo!
Ich möchte ein QFtp-Objekt löschen und nullen:
Allerdings kommt ein Speicherfehler weil wohl irgendwas noch auf das FTP-Objekt zugreift.
Könnte es ein offener Request sein? Oder ist das eher unwahrscheinlich?
Ich habe mal im Einzelschritt debugged. Meine Funktionen werden tadellos ausgeführt. Erst wenn der User wieder Eingaben tätigen kann, kommt der Fehler in der free.c (also Speicher freimachen).
MfG
Verfasst: 4. Dezember 2005 19:35
von Christian81
Verfasst: 10. Dezember 2005 18:32
von Saiyaman
Es ist zu der Zeit schon geschlossen. Ich kann den Pointer einfach so nullen. Dann bekomm ich keinen Fehler. Es liegt am löschen des Objektes. Irgendwas greift wohl auf den Speicherbereich zu. Ich komm aber einfach nich dahinter, was das sein soll.
MfG
Verfasst: 11. Dezember 2005 15:03
von Timewarp
kann es sein das das Objekt von QT selbst schon gelöscht wurde ?
Ich kann mich z.B. erinnern das ein QListWidget Objekt von alleine sein HeaderItem löscht so das man das nicht selbst machen muss.
Verfasst: 13. Dezember 2005 09:44
von Goos
Hast dich aber mit dem Code posten auch schwer zurueckgehalten

Verfasst: 19. Dezember 2005 18:37
von Saiyaman
Ja, das war halt die wichtigste Stelle. Wenn ich die ganze Klasse poste, wo diese eine Methode drin ist, bringts imo nix.
Wie könnte ich herausbekommen, ob QT das Objekt von selbst löscht? Beim QHttp-Objekt scheint ers nich zu machen, da klappt nämlich alles.
MfG
Verfasst: 8. Februar 2006 21:01
von benchdollar
Ich habe ein ähnliches Problem.
Unter Windows lade ich per ftp->get("file.jpg") eine datei runter. diese kann ich aber bis zum schliessen der anwendung nicht öffnen, da irgendwie QFtp immer ein Filehandle darauf geöffnet hat, obwohl ich flush() und close() aufgerufen habe.
Verfasst: 27. Juni 2007 09:37
von Giri
Hallo,
Ich wollte mal nachfragen ob (und vor allem WIE) das Problem gelöst worden ist. Ich hänge nämlich gerade an der selben Sache.
Schöne Grüße,
Giri
Verfasst: 27. Juni 2007 09:56
von Giri
Für diejenigen die vielleicht auch mal in die Situation kommen - habe (für meinen Fall) eine Lösung gefunden.
Ein delete des "currentDevice" reicht nicht aus um die Ressourcen freizugeben. Auch wenn man den IODevice selber nie aufgemacht hat, muss man ihn per Hand selber zumachen (und nicht einfach löschen wies in der Doku steht).
Code: Alles auswählen
if(m_ftp->currentDevice()->isOpen())
{
m_ftp->currentDevice()->close();
}
delete m_ftp->currentDevice();
Schöne Grüße,
Giri
Verfasst: 27. Juni 2007 10:43
von RD1978
Hi,
Soweit ich weiß, sollten Objekte die von QObject erben gundsätzlich mit deleteLater() gelöscht werden, nicht mit delete. Dadurch übernimmt Qt das löschen des Objektes.
void QObject::deleteLater () [slot]
The object will be deleted when control returns to the event loop.
MfG RD1978