Alternative zur Qlist?

Alles rund um die Programmierung mit Qt
Antworten
gandalffo
Beiträge: 11
Registriert: 22. Februar 2012 15:44

Alternative zur Qlist?

Beitrag von gandalffo »

Hallo Leute,

Meine QList gibt den Speicher nicht mehr frei, ich weiß das Thema wurde hier schon oft behandelt aber ich habe nie
wirklich eine Lösung für das Problem gesehen.
Ich habe eine eigenes Object (primitive class) in der ich 2 QLists habe eine mit
int und eine mit QString.
Ich habs im Destruktur mit clear() und mit qDeleteAll() probiert, ohne Erfolg.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alternative zur Qlist?

Beitrag von franzf »

gandalffo hat geschrieben:Meine QList gibt den Speicher nicht mehr frei
und wie kommst du zu der Annahme?
Ich habe eine eigenes Object (primitive class) in der ich 2 QLists habe eine mit
int und eine mit QString.
Ich habs im Destruktur mit clear() und mit qDeleteAll() probiert, ohne Erfolg.
Eine QList<int> und eine QList<QString> und du probierst es mit qDeleteAll? Das kann nur schief gehen.

Und um dir wirklich helfen zu können brauchen wir Code, und zwar so viel, dass wir dein Problem nachvollziehen können.
Dafür sollte es kompilierbar sein und dein Problem aufweisen.
gandalffo
Beiträge: 11
Registriert: 22. Februar 2012 15:44

Re: Alternative zur Qlist?

Beitrag von gandalffo »

mit Hilfe von top, die Auslastung steigt bis 110% und weiter, dann stürtzt das Programm ab.

sorry, Details vergessen. QList<QSring*> und QList<int*>
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alternative zur Qlist?

Beitrag von franzf »

gandalffo hat geschrieben:sorry, Details vergessen. QList<QSring*> und QList<int*>
Und was reitet dich, hier Zeiger auf int/QString zu nehmen?
Und nein, das reicht so immer noch nicht!

Ansonsten gibt es noch das hier:
https://bugreports.qt-project.org/browse/QTBUG-22037
gandalffo
Beiträge: 11
Registriert: 22. Februar 2012 15:44

Re: Alternative zur Qlist?

Beitrag von gandalffo »

http://doc.qt.nokia.com/4.7-snapshot/qt ... qDeleteAll

Ich habe mich an diese Doku gehalten
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Alternative zur Qlist?

Beitrag von Christian81 »

Diese Doku redet über Pointer in einer QList. Da aber weder "int" noch "QString" ein Pointer ist ...
und ohne Code können wir eh nichts machen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: Alternative zur Qlist?

Beitrag von franzf »

Er schreibt doch hier, dass es Pointer sind.
Trotzdem:
* Macht das eigentlich kaum Sinn, außer du kommst aus der Java-Ecke (oder du weißt wirklich GENAU, dass du es brauchst, und davon gehe ich nicht aus)
* Es fehlt Code, ohne dem wir nicht helfen können.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Alternative zur Qlist?

Beitrag von Christian81 »

Sorry, habs überlesen. Ist aber auch sehr ungewöhnlich und in nahezu allen Fällen unnötig.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Re: Alternative zur Qlist?

Beitrag von RHBaum »

Generell hat Qt schon nen leichtes Problem mit Ressourcen, aber nicht in der Art, das man es für deine Abstürze direkt verantwortlich machen kann ...
Qt verwendet impliziet sharing, d.h du kannst gar nicht den zeitpunkt bestimmen, wann dein Speicher wirklich freigegeben wird.

Aber genau das wuerde dir bei Deinen Listen den Arsch retten ^^
QList<QString> (ohne Pointer) ist deswegen einigermassen performant ....
Die alternative:
std::list<std::string> (bei ner STL impl ohne implizietes sharing, was IMHo die meisten haben) bekommst du von der performance her ne Katastrophe
aber dafuer genau(er) definiertes Verhalten

Die Speicherauslastung von TOP ist deswegen auch ned wirklich aussagefaehig, und krankt sowieso schon am prinzip ^^
Selbst mit extensiver nutztung der STL/Boost oder ähnlichen, wird speicher nicht sofort wieder freigegeben, dank eigener Speichermanager der Libs, bzw der c++ runtime.

Das du irgendwo deinen Speicher zumuellst ist trotzdem wahrscheinlich .... nur wirst mit top und co kaum anhaltspunkte finden wo genau.
Da helfen andere Tools weiter (profiler, speicheranylse tools fuer deinen compiler valgrind z.b. )

willst du 100% performance, bei so wenig wie möglicher Speicherauslastung wirst du etwas tiefer in die Trickkiste greifen muessen, als wie container in container ...
Aber da sind alle anforderungen zu auch relevant, so das wir ohne die kaum tips geben könnten ...

Aber ich denke dein erster ansatzpunkt sollte es sein die "unnötigen" news rauszubekommen ...
bei der qt ist ein :
QString strX = stry; /// (cow hier wird wahrscheinlich auch nur ein Zeiger neu zugewiesen ... )
nur geringfügig(sprich: vernachlaessigbar) imperformantier
als ein
QString * px = py;

Ciao ...
Antworten