QCustomEvent - Memory Probleme

Alles rund um die Programmierung mit Qt
Antworten
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

QCustomEvent - Memory Probleme

Beitrag von Goos »

Hi, ich hab gerade ein Problemchen beim posten von QCustomEvents.


Meine Event-Klasse schaut beispielsweise so aus:

Code: Alles auswählen

class AppendLogEvent : public QCustomEvent
{
public:
    AppendLogEvent(QString p) : QCustomEvent(LOGAPPEND), p(p) {};
	QString getMessage() const {return p;}
private:
    QString p;
};
Das Problem bei der ganzen Sache ist folgendes.
Wenn ich in meinen String p mal etwas mehr reinpacke, so wird das allem Anschein nach nicht mehr geloescht, obwohl laut QT-Doku mein Event nach dem erfolgreichen Delivern loeschen sollte.
Der Speicherbedarf meiner Anwendung waechst also sehr schnell und steigt auch gleich im Megabyte Bereich an.
Wer hat Erfahrung mit dem Problem und kann mir dazu vielleicht Tips geben? :)


Goos
(QT version 3.3.3.)
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Hallo, also das Problem scheint relativ leicht zu sein. Du hast die gleiche Variable für die Klasse, wie auch die die du übergibst. p...

Das ist mit Sicherheit schon der ganze Fehler.
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Du hast die gleiche Variable für die Klasse, wie auch die die du übergibst. p...
Mh, interessant, aber sollte da nicht eigentlich der Compiler aussteigen, bzw. mindestens eine Warnung ausgeben? Kann mir grad garnicht vorstellen, dass das überhaupt funktioniert...? Noch nie so einen Fall gehabt. Aber an Rekursion sollts doch dann auch nicht scheitern?! Was wäre dann der Grund, warum das Programm soviel Speicher verbraucht?!

Ist jetzt alles nur rein interessehalber..

Daniel
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Eigentlich schon, hab ich mir auch schon gedacht. Der Grund für den Speicherüberlauf? Naja, Wert wird um Wert um Wert um Wert um Wert ................................... übergeben. Also ich denke schon, dass es das Problem ist, ansonsten ist da ja nix zum kaputt machen.... oder?

Ist wohl ein M$ Compiler....
Spring-Daniel
Beiträge: 40
Registriert: 4. Oktober 2004 16:26

Beitrag von Spring-Daniel »

Ist eben die Frage, wie es sich bei so einer Initialisierung mit der Sichtbarkeit verhält... allerdings ist das eine lokale Variable, da im Konstruktor-Kopf deklariert. Inwiefern unterscheidet sich diese Art der Initialisierung von einem normalen p = p im Konstruktor? Bei einem p = p gäbe es ja auch keine Rekursion...
Für mich klingt das, falls es wirklich daran liegen sollte, wirklich nach einem Compiler-Bug. ( Sehr wahrscheinlich M$ :)

Ansonsten besteht ja auch immernoch die Möglichkeit, dass irgendwo anders im Programm Speicher verschlampt wird.
Goos: Falls es nicht am diskutiertem Problem liegt: Bist Du Dir sicher, dass das Problem nur beim Posten von CustomEvents oder aber irgendwo anders besteht? Welchen Wert hat denn LOGAPPEND ?
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Mh, aber es ist ja nicht einfach p = p!?! sondern einmal ist p die übergeben Variable, einmal die locale, deswegen sind es eigentlich 2p's.... ich probiere das jetzt aus.....

Ich sage gleich bescheid, wies aussieht.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ok, also gcc Compiler baut das, kein Thema...

Also ausführen geht auch...

Speicherüberlauf? Keine Spur....

Ok, also es scheint keinen Fehler zu geben in diesem Stück deines Codes.......
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Moin Leute und schonmal vielen Dank fuer eure Muehen :)

...ach und laestert doch nicht immer so ueber meinen M$ Compiler *g* ;)

Wie von euch schon festgestellt ist mein p(p) kein Problem, auch wenns auf den ersten Blick wohl etwas gewoehnungsbeduerftig ausschaut.

Ich stell mich hier grad in die Ecke und schaem mich dafuer, dass ich gestern ueberhaupt so doofe Fragen gestellt hab. Ich war wohl schon etwas ueberarbeitet und hab die wahren Hintergruende nicht erkannt :)

Die Aufloesung des Problems ergibt sich im wesentlichen schon durch LOGAPPEND. Das Log ist in diesem Fall ein TextEdit zu Debug Zwecken.
Der Speicherzuwachs wenn ich da gleich Megabytes an Text reinschreib erklaert sich dann auch von selbst. Ich hatte also nur an der falschen Seite geschaut, nicht mein Event, sondern was ich damit anstell ist das Problem.

Also dann nochmal ein Danke fuer eure Muehen und noch nen schoenen Tag :)

Goos
Antworten