malloc



  • hallo,

    ich wollte fragen wann man genau malloc verwenden muss? Muss ich das bei jeden Pointer machen oder nur wenn ich Listen und Array habe?



  • Allgemein gesagt: Du darfst einen Pointer nur dann dereferenzieren wenn er auf Speicher zeigt der dir gehört. Ob der Speicher nun auf dem Stack oder auf dem Heap liegt ist dabei wurscht.

    char *a,*b,*c;
    char foo;
    a = &foo;
    b = malloc(1);
    
    foo = *a // legal, zeigt auf foo
    foo = *b // legal, zeigt auf Speicher den wir angefordert haben
    foo = *c // illegal, uninitialisierter Pointer
    

    Bei c wäre das Verhalten undefiniert. Es kann alles passieren:
    - Das Programm crasht
    - Das Programm läuft munter weiter
    - Dein Rechner bringt dir ein kühles Bier
    - ...

    Edit: malloc() benutzt man allgemein dann, wenn man zur Compilezeit noch nicht weiss wieviel Speicher benötigt wird (Ausnahme: VLA (die sind aber selten sinnvoll)).





  • Misterx schrieb:

    ich wollte fragen wann man genau malloc verwenden muss?

    hinter malloc/calloc/realloc/free.. verbirgt sich code der einen speicherpool in kleine stückchen aufteilt. ist ganz nützlich wenn man vorher nicht weiss wieviel speicher man braucht. es hat auch den kleinen nachteil, dass es schiefgehen kann (und dann guckt man erstmal doof und denkt sich 'was jetzt?')

    Misterx schrieb:

    Muss ich das bei jeden Pointer machen oder nur wenn ich Listen und Array habe?

    man 'muss' es eigentlich nie verwenden. es geht immer irgendwie auch ohne...


Anmelden zum Antworten