tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
486
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    plex84 plex84 ist offline Grünschnabel
    Registriert seit
    Apr 2005
    Beiträge
    3
    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?
     

  2. #2
    Lemiras Lemiras ist offline Mitglied Silber
    Registriert seit
    Oct 2004
    Beiträge
    55
    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é
     

  3. #3
    Registriert seit
    Oct 2003
    Beiträge
    1.706
    da die Variable "var" nur zu der Funktion "allok()" gehört und somit nach beenden der Funktion doch sowieso gelöscht wird.
    Automatische Allokierung:

    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"
    ----

  4. #4
    basd basd ist offline Mitglied Brokat
    Registriert seit
    Nov 2003
    Ort
    München
    Beiträge
    264
    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

  1. Antworten: 0
    Letzter Beitrag: 18.01.09, 10:09
  2. AVID Free DV - Import von AVI, nur Ton, jedoch kein Bild
    Von exitboy im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 0
    Letzter Beitrag: 24.09.06, 01:46
  3. Es erfolgt kein Eintrag in die Datenbank....
    Von lordofscotland im Forum PHP
    Antworten: 2
    Letzter Beitrag: 05.06.05, 17:12
  4. Control (OCX) für Access gesucht FREE wenn möglich
    Von Skittle im Forum Office-Anwendungen
    Antworten: 0
    Letzter Beitrag: 27.04.05, 16:34
  5. Textfeld löschen wenn neue Eingabe erfolgt
    Von Hellter im Forum Visual Basic 6.0
    Antworten: 7
    Letzter Beitrag: 09.11.04, 20:24