Speicher-Leaks
-
void foo () { int *x = new int; }
wenn der compiler intelligent ist, warnt er mich. das setze ich aber nicht voraus.
-
Das ist für solche akademischen Beispiele vielleicht sinnvoll, ernstzunehmen ist es aber nicht.
#include <fstream> void foo() { int *p = new int[100]; std::ofstream out("foo.txt"); out << p; } void bar() { std::ifstream in("foo.txt"); int *p; in >> p; delete [] p; } int main () { foo(); bar(); }
-
Also ich glaube mal meinem alten Kumpel Jesse Liberty, der da in seinem Buch schrieb, dass der reservierte Speicher am Ende des Programms freigegeben wird.
Noch ein paar Worte zu guten IDE's: Einige (professionelle) entdecken Speicher-Leaks.
-
Noch ein paar Worte zu guten IDE's: Einige (professionelle) entdecken Speicher-Leaks.
Aber verlassen sollte man sich darauf nicht
Fuer VC6 "schaff" ich es, meine Speicherleaks so zu verstecken, das die IDE (Debugger) ned meckert ... Aber das BS an den Rande des Wahnsinns treibt, wenn man ned rechtzeitig damit aufhoert ... und ich also meine Leaks selber suchen und ueberwachen muss ....
Ciao ...
-
Also ich glaube mal meinem alten Kumpel Jesse Liberty, der da in seinem Buch schrieb, dass der reservierte Speicher am Ende des Programms freigegeben wird.
Wie gesagt, dass kommt auf das Betriebssystem an. Irgend jemand hat mal erzählt, dass das zB. bei WinNT 4 nicht so ist! Aber selbst wenn der Speicher am Ende des Programmes freigegeben wird, sollte man drauf achten, dass es keine Speicher Lücken gibt. Angenommen, du schreibst einen Server, der in irgend einer Funktion ein kleines Speicherloch hat, nur ein paar bytes. Aber ein Server läuft je nach dem 24 Stunden am Tag und 7 Tage in der Woche und 365 Tage im Jahr und so sammelt sich das an und nach ein paar Tagen (vielleicht Monaten) darf man dann den Server neustarten, also lieber gleich vernünftig programmieren.
-
Also ich glaube mal meinem alten Kumpel Jesse Liberty, der da in seinem Buch schrieb, dass der reservierte Speicher am Ende des Programms freigegeben wird.
Na das darf nie und nimmer eine begründung sein wieso man Resourcen nicht freigibt. Es gibt ja noch mehr wie Speicher.... Alles was man sich irgendwoher reserviert muss auch sicher wieder irgendwo freigegeben werden.
http://fara.cs.uni-potsdam.de/~kaufmann/?page=cpp2html dort in den FAQs findest Du ne Informationen wie man sich das erleichtern kann. (Sry seite geht grad nicht und den genauen Link hab ich nicht.)
-
wahrscheinlich meinst du folgende Links
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Leak#Answ
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=auto_ptr#Answ
-
kurze anmerkungen:
es gibt auch ressourcen die das OS nicht freigeben kann, weil sie eben nicht Prozessgebunden sind.was macht man denn dann? dann hilft einem nur beten...
achja, zu den 'coolen' Typen die denken, dass das OS alles macht: was ist denn, wenn euer Programm mal länger läuft - sagen wir 3 wochen am stück. und nie wird speicher freigegeben... dann habt ihr den Rechner in die Knie gezwengt, denn das OS ist kein GC!!
-
was ist denn, wenn euer Programm mal länger läuft - sagen wir 3 wochen am stück
Dann muss man regelmäßig forken
Ich habe von Implementationen gehört, bei denen free etwa so aussieht:void free( void *memblock ) { // ach ne. Ich bin heute zu müde zum Aufräumen... return; }
PS: Wer angeforderte Resourcen nicht freigibt handelt unmoralisch
-
Nun ja, ich glaube ihr habt mich nicht ganz richtig verstanden.
Ich selber bin ein relativ sauberer Programmierer und räume am Ende des Programms immer schön meinen Müll wieder weg.Es ging mir jetzt nur darum, falls ich das Freigeben mal vergesse. Nobody is perfect.
Gut, das es keine generelle Antwort gibt habe ich jetzt gemerkt. Also danke an alle.
BodPa