Ich muss mal was einwerfen: Was ist eogentlich ein speicherleck Ist dass, wenn ich vergesse was freizugeben und da tote daten aufm speicher rumliegen??? Ich gebe nemlich nie was frei... Was für Daten müssen eigentlich wieder freigegeben werden? Bei DLs VBOs und Texturen mache ich das (manchmal)!
Ich empfehle dir .NET zu verwenden, dann brauchst du deine Angewohnheiten nicht zu ändern!
Ansonsten würde ich dir Empfehlen alle deine Quellcodes mal durchzugucken!
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Ich muss mal was einwerfen: Was ist eigentlich ein speicherleck Ist dass, wenn ich vergesse was freizugeben und da tote daten aufm speicher rumliegen??? Ich gebe nemlich nie was frei... Was für Daten müssen eigentlich wieder freigegeben werden? Bei DLs VBOs und Texturen mache ich das (manchmal)!
Immer wenn man direkt Speicher belegt durch GetMem,New oder einen Konstruktur muß man den natürlich auch wieder freigeben.
Speicherlecks sind einige der am schwersten zu findenden Fehler und deshalb ist das bei .Net eine große Erleichterung.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also meiner Meinung nach ist das das erste was man bei Tutorials zu Klassen lernt: Es gibt einen Constructor und einen Destructor. Hast du das übersprungen?
Ich empfehl die wirklich mal mit TurboPascal zu programmieren. Da hast du nur 256KB RAM zur verfügung, und du wirst schnell lernen, dass Speicherfreigeben die einzige Möglichkeit ist überhaupt was größeres am Laufen zu halten... (so wars beim PBall Manager 1 nämlich...)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Di Dez 02, 2003 12:47 Beiträge: 300 Wohnort: Marburg
Naja, ich arbeite momentan auch nur mit Records und n par Objects... Und keine sachen mit Destruktor und so.
Vielleicht solte ich da in nächster Zeit noch mal n par Grundlagen nachholen!
_________________ Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de
Naja, ich arbeite momentan auch nur mit Records und n par Objects... Und keine sachen mit Destruktor und so. Vielleicht solte ich da in nächster Zeit noch mal n par Grundlagen nachholen!
Objecte sind doch Klassen oder meinst du was anderes???
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Die object Typen sind so eine Mischung aus record und class. Genauso wie records sind es Wertetypen, sie haben aber auch virtuelle Methoden, allerdings keine Sichtbarkeitsbeschränkungen,Properties und keine gemeinsame Basisklasse.
Objects sollten aber mit New() und Dispose() erzeugt bzw. freigegeben werden. Sonst kann es zu merkwürdigen Phänomenen im nil-Bereich führen (Alte, verloren geglaubte objects zum Bleistift). Deswegen steht in der Delphi-Hilfe ja auch, dass man objects nicht benutzen soll, weil man da oft vergisst, diese zu erzeugen und freizugeben.
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Objects sollten aber mit New() und Dispose() erzeugt bzw. freigegeben werden. Sonst kann es zu merkwürdigen Phänomenen im nil-Bereich führen (Alte, verloren geglaubte objects zum Bleistift). Deswegen steht in der Delphi-Hilfe ja auch, dass man objects nicht benutzen soll, weil man da oft vergisst, diese zu erzeugen und freizugeben.
Ach deswegen habe ich von dennen nie etwas mitbekommen!?!?
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
öhm nur mal ne Frage hab mir jetzt nur mal das Tut angeschaut zum MemCheck: habsch da richtig verstanden? einfach bei Programmbeginn "Mem Chk;" aufrufen und ab dann gibts Exceptions bei nem Mem-Leak?
//
ach ja nur noch ne Nebenbemerkung zu GCs: also ein Prof hat mal erzählt, dass ein ehemaliger Student von ihm an irgendeiner Forschungsanstalt war und die haben mit Java gearbeitet. Dort gings um DNS und die hatten EINIGES an Daten und alles scheint der GC von Java da net richtig bereinigt zu haben ... . Also blindes Vertrauen in den GC, sollte man auch vorsichtig sein^^
edit: das muss sein für mich als Visual C++ 6-Verehrer^^: in der Enterprise-Version findet man dort auch super fein Mem-Leaks. EInfach im Debug-Modus laufen lassen und nach Programmende die Ausgabe durchforsten. Dort zeigt er Memleaks an. Doppelklick drauf und er springt zum new was das MemLeak ausgelöst hat. Er sagt sogar wieviel Byte "verloren" gingen und was in denen drinne stand^^ (wers brauch *lol*) Damit lässz sich jedenfalls wunderschön arbeiten
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du bindest MemChk in dein "Hauptprogramm" ein (also in deiner *.DPR Datei) und zwar ganz am Anfang. Das wars. MemCheck gibt dir auch aus in welcher Zeile das Loch auftrat und wieviele Bytes verloren gingen. AUßerdem auch, wieoft das Loch auftrat.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.