ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
486
486
EMPFEHLEN
-
Dieses Programm verdeutlicht meine Frage bestimmt besser als tausend Worte:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include <stdio.h> #include <stdlib.h> int allokieren(void) { char *var; var = NULL; if ((var = malloc(50 * sizeof(char))) == NULL) { fprintf(stderr, "malloc() fehlgeschlagen!\n"); return 1; } /* free(var) */ return 0; } int main(int argc, char *argv[]) { while (!allokieren()); return 1; }
Hat dieses Programm nun zur Folge, den gesamten Speicher zu nutzen, wodurch das System auf keinen Speicher mehr zugreifen kann? Oder kann ich das Programm durchaus so benutzen, da das free() unwichtig ist?
An dieser Stelle denke ich, dass free() in der Tat unwichtig ist, da die Variable "var" nur zu der Funktion "allok()" gehört und somit nach beenden der Funktion doch sowieso gelöscht wird.
Oder täusche ich mich da?
-
Es wird genau das machen was es soll Speicher anfordern... bis keiner mehr da ist!
Ich hab es nicht ausprobiert aber höchstwahrscheinlich wird es spätestens dann vom Betriebssystem raus geschmissen sonsonten kehrt malloc mit einer Fehlermeldung zurück das Programm wird beendet. Hierbei wird die exit() funktion aufgerufen und dabei der Speicher wieder frei gegeben.
free ist schon wichtig damit eben nicht der ganze Speicher dicht ist.
Gruß André
-
Automatische Allokierung:da die Variable "var" nur zu der Funktion "allok()" gehört und somit nach beenden der Funktion doch sowieso gelöscht wird.
Code :1 2 3 4 5 6
int allokieren(void) { char var = 's'; return 0; }
Für die Variable var wird automatische Speicher bereitgestellt (Realisierung
durch Stack). Nach verlassen der Funktion "allokieren" wird der Speicher für
var automatisch wieder freigegeben.
Manuelle Allokierung:
Code :1 2 3 4 5 6 7
int allokieren(void) { char* var = malloc(50 * sizeof(char)); /* free(var) */ return 0; }
var zeigt auf einen Speicherbereich der manuell mittels der Funktion malloc
angefordert wurde. (Dieser liegt auf dem Heap).
Nach dem Verlassen der Funktion "allokieren" ist der Speicher für den Zeiger var
zwar freigegeben wurden, aber der Speicherbereich auf den var einmal zeigte ist
noch immer belegt, wenn free() nicht aufgerufen wurde:
=> du bekommst ne Menge Garbage im Speicher. Der Speicher ist nicht mehr
verwendbar da dir die Referenz auf ihn verloren gegangen ist.
Gruß
RedWing"I'm not deaf, I'm ignoring you"
----
-
Das Problem läuft ne weile und das system kann auch mallangsamer werden wegen swapen aber das System wird nicht richtig "zerstört" da windows jedem Programm 4 GByte zugesteht wovon es jedoch nur 2 GByte allocieren kann ... wenn der heap voll ist kriegst du kein Speicher mehr und wenn das programm weg ist ist auch wieder alles wie es war. Solange der SPeicher nicht prozess übergreifgend reserviert wird passiert da net viel
Ähnliche Themen
-
Vista: Anwendungen flackern als wenn ständig ein Aktualisieren erfolgt
Von julchen im Forum Microsoft WindowsAntworten: 0Letzter Beitrag: 18.01.09, 10:09 -
AVID Free DV - Import von AVI, nur Ton, jedoch kein Bild
Von exitboy im Forum Videoschnitt, Videotechnik & -produktionAntworten: 0Letzter Beitrag: 24.09.06, 01:46 -
Es erfolgt kein Eintrag in die Datenbank....
Von lordofscotland im Forum PHPAntworten: 2Letzter Beitrag: 05.06.05, 17:12 -
Control (OCX) für Access gesucht FREE wenn möglich
Von Skittle im Forum Office-AnwendungenAntworten: 0Letzter Beitrag: 27.04.05, 16:34 -
Textfeld löschen wenn neue Eingabe erfolgt
Von Hellter im Forum Visual Basic 6.0Antworten: 7Letzter Beitrag: 09.11.04, 20:24





Zitieren
Login






