Programm triggert Speicherleaks in X

marcellus

marcellus

Kaiser
[SOLVED] Programm triggert Speicherleaks in X

Ich hab ein C Programm geschrieben, das cairo verwendet, das Problem dabei ist, dass es bei jedem redraw einen ziemlich massiven Speicherleak in X auslöst.
Die Speicherbelastung tritt beim Prozess "X" auf und verschwindet auch nicht, wenn ich mein Programm abdreh.

Ich hab diesen Thread hier in Programmieren allgemein gestellt, weil ich denke das es eher mit cairo als mit der C api von cairo zu tun hat.

Meine Fragen sind jetzt:
1. Ist das meine Schuld oder ist das ein bug in X?
2. Was kann ich dagegen machen?

tia
 
Zuletzt bearbeitet:
Die sache ist die, dass der sourcecode etwas unübersichtlich ist und die makefiles scheiße sind.

http://gfig.googlecode.com/svn/trunk/

Ansich gehts nur darum, dass ich die Zeichenfläche bei jedem expose event neu zeichne, nur da scheint X jedesmal neu Speicher anzulegen und ich hab ka wie ich das unterbinden kann.
 
Hi,

dieser Fred ist zwar schon wieder ein paar Tage alt, aber wer weiss. Hast du es denn mal mit einem memory debugger/profiler wie valgrind versucht (http://valgrind.org/)?
Ich glaube kaum, dass jemand Lust hat deinen Source Code Stueck fuer Stueck durchzugehen, wenn du selbst keinen Auszug hast in dem du den Fehler vermutest. ;)

Ansonsten vielleicht mal die Dokumentation fuer die externen API Calls durchgehen die du verwendest, und danach durchsuchen, ob du irgendwo uebersehen hast, dass du Speicher wieder freigeben musst. Das kann ja Recht schnell mal passieren.

mfg,
bytepool
 
Ich wollte gestern cairo aus dem git ziehen, weil die neueste version den Speicherbedarf überwachen kann, allerdings hab ich zwischendurch den Fehler gefunden. Ich hab bei jedem expose event eine Gdk zeichenfläche angelegt, ohne was damit zu machen.

Sehr dumm muss ich sagen, aber ich bin froh, dass ichs gefunden hab.

@bytepool, danke für deine Hilfe, aber ich bin mit stück für stück durchschauen hingekommen.
 

Ähnliche Themen

Beratung für das 1. software projekt?

Probleme mit fork() und mehreren Teilfenstern

Zurück
Oben