Bernhard Walle [18 Jul 2002 17:15:19 +0200]:
Warum? Könntest Du / ein anderer das etwas näher (für Anfänger wie
mich) erläutern? Was heißt "Speicherleck"?
Speicherlecks sind Speicher, der alloziert aber nicht freigegeben
werden kann, da die Adresse unbekannt ist:
char *t;
t = malloc(50);
t = malloc(100);
Nach dem zweiten Aufruf von malloc() sind 50 Bytes vom Programm
alloziert, können aber nicht mehr freigegeben werden, da t ja nun auf
einen neu angeforderten Speicherbereich verweist. Folgendes
Testprogramm:
#include
#include
int main(int argc, char *argv[])
{
char *t = NULL;
do
{
t = malloc(1024*1024*64); /* 64 KiB allozieren */
}while(t != NULL);
if(t == NULL)
{
perror("malloc() failed")
return 1;
}
return 0;
}
Würde so lange 64 KiB Blöcke anfordern, bis der dem Programm zur
Verfügung stehende Speicher (z.B. ulimit) erschöpft ist.
Der obige Fall ist ja noch schnell erkennbar, aber in komplexeren
Programmen kann es durchaus vorkommen, dass man den Überblick verliert
und dann kann z.B. ein Speicherleck im X-Server den ganzen Rechner
praktisch zu Stillstand bringen, weil er nur noch mit Swappen
beschäftigt ist.
Philipp
--
Philipp Thomas work: pthomas@suse.de
Development SuSE Linux AG private: philippt@t-online.de