Riesiges Problem mit Arbeisspeicherfüllung

Liebe Leute

Ich hab diesmal so ein richtig schlimmes Problem:
Bei einem Programm, das ich später verkaufen möchte, gibt es einen sehr merkwürdigen Bug, der mich total überfordert: Wenn man eine Weile in einer While-Routine nichts macht, beginnt das Programm plötzlich, den Arbeitsspeicher zuzufüllen. Wenn der voll ist, schaltet Windows auf den virtuellen Arbeitsspeicher auf der Festplatte um.

Tönt vielleicht harmlos, aber dadurch wird der ganze PC unbrauchbar!

Das vielleicht Dümmste daran ist, dass ich euch den Quellcode nicht öffentlich geben kann, da ich das Programm ja mal verkaufen will.

Hat irgendjemand Erfahrung mit solchen Problemen? Dass einfach so der Arbeitsspeicher zugedröhnt wird? Woran kann das liegen?

Das Programm ist C++ und benutzt SDL. Ich habe keine manuellen Allokationen gemacht.

Das Programm muss in zwei Wochen zum Echttest laufen!

Liebe Grüsse
Hoffnungsvoll
Euer Kalsan

hallo,

ich tippe mal, dass du irgendwelche variablen nicht gut oder richtig zugeordnet hast.

lg dev

Der Arbeitsspeicher kann auch durch Funktionsaufrufe, die irgendwwo Speicher allokieren vollgepumpt werden. Ich hatte einmal ein Problem bei einem Programm, dass die GDI nutzt. Ich hatte einmal vergessen ein HBITMAP, dass ich am Anfang einer Schleife angefordert habe, am Ende wieder mit DeleteObject() freizugeben.

Ohne Quellcode tu ich mir leider wirklich schwer dir zu helfen. Wenn du schon nichts selber allokierst, dan sieh dir vielleicht deine benutzen API Funktionen an, ob die eventuell Speicher benötigen und Handles zurückgeben, die du wieder freigeben könntest.

Vielleicht funktioniert aber auch irgendein Zähler in deiner Schleife nicht richtig und wird im Laufe der Zeit zu groß. Du könnest probieren alle wichtigen Variablen in einer Zeile in der Konsole regelmäßig mit printf() auszugeben. Dann könntest du vergleichen ob sie sich im Rahmen verändern, oder ob es Ausreißer gibt.

Falls du nicht mit einem Debugger umgehen kannst, würde ich dir dringend empfehlen das zu lernen und dann deinen Programmablauf einmal genau unter die Lupe zu nehmen.

Falls du Windows benutzt könntest du mit GlobalMemoryStatus() regelmäßig (wenn es sein muss auch nach jedem Funktionsaufruf) deine RAM Auslastung mitloggen. Dann kommst du vielleicht darauf, nach welchem Funktionsaufruf so viel Speicher benötigt wurde. Genau nehmen kannst du das aber nicht, da ja auch andere Programme RAM belegen können.

Mehr fällt mir jetzt im Moment auch nicht ein. Hoffe du kannst was damit anfangen =)

mfg dixxi

Hallo

1.Einzelschrittdebuggen mit Speicheranzeige
Ist die Speicheranzeige nicht Teil des Debuggers, mußt Du sie selbst programmieren. Es gibt auch eine Windows-Api Funktion dafür.

2.Da sind wahrscheinlich noch andere Fehler.

MfG

Hallo,

Tönt vielleicht harmlos, aber dadurch wird der ganze PC
unbrauchbar!

Das ist alles andere als harmlos. Es ist ein klassisches „memory leak“.

Kannst Du uns was über Deine Entwicklungsumgebung verraten? Es gibt spezielle Werkzeuge, um sowas zu debuggen.

Google Dir halt mal einen.

Gruß

Fritze

Aha!
Herzlichen Dank!

Der Compiler ist soweit zufrieden, und ich sehe anhand eines Gadgets, wie es um den Arbeitsspeicher steht. Der geht eben dann rauf, wenn ich eine Weile nichts macht.

Tatsächlich habe ich einige TTF_CloseFont(); vergessen. Das wird es wohl sein.

Moral von der Geschicht: Gründlicher programmieren und nix vergessen!

Werde alles umkrempeln und kontrollieren, dann testen.

Danke! *4u

lg
Kalsan

Inwiefern? Könntest du „nicht richtig zugeordnet“ genauer erklären?

Danke, werd ich mal probieren. Ich glaube, Code::Blocks kann das.

lg
Kalsan

Meine Entwicklungsumgebung ist kein Geheimnis: Dev-C++ und SDL, -Image, sowie -TTF.

Danke.

…gelöst
Tatsächlich war der Fehler in fehlenden Free-Befehlen. TTF-Fonts wurden in die RAM geladen, aber nicht mehr freigegeben. Nun klappt’s.

Liebe Grüsse
Kalsan