Verständnisfrage zu malloc()

dodik4711

Grünschnabel
Hallo Leute,

bin Einsteiger in C und verzweifle gerade an malloc().
Wenn ich richtig verstanden habe, dann allokiert malloc() Platz im Arbeitsspeicher und liefert dann einen Zeiger auf das erste Bit. Nun frage ich mich aber weshalb folgender Code funktioniert.

Code:
void allokieren() {
    char *str = (char *) malloc(sizeof (char));
    str[0] = 'a' ;
    str[1] = 'b' ;
    str[2] = 'c' ;
    printf("%s\n", str) ;
}

printf liefert folgende Ausgabe.
Code:
abc

Weshalb passen hier 3 Bustaben in str hinein, obwohl ich doch nur Platz für einen Buchstaben (sizeof(char)) reserviert habe.

Danke im Voraus
 
Hi

Weshalb passen hier 3 Bustaben in str hinein

Tun sie gar nicht.
Du reservierst tatsächlich nur Platz für ein char.

Es wird allerdings nicht automatisch überprüft, ob du wirklich nur dein einzelnes char verwendest.
Das liegt am Programmierer, so was nicht in den Code zu schreiben.

Mit deinen zwei weiteren chars überschreibst du irgendwas anderes von deinem Programm. Das kann der Wert einer anderen Variable sein (der du dadurch eben einen neuen Wert gibst, ohne es zu wollen oder zu wissen) oder auch ein Teil des kompilierten Codes.

Das dein Programm trotzdem funktioniert, ist mehr oder weniger Zufall. Werden die Programme komplexer, sorgen solche Fehler garantiert für irgendwelche Probleme beim Ausführen; der Fehler lässt sich dann zu allem Überfluss nur sehr schwer finden.

Was Anderes: Zu jedem malloc gehört ein free! Wenn du das reservierte char nicht mehr brauchst (spätestens in der letzten main-Zeile) solltest du
C++:
free(str);
aufrufen.

Gruß
 
Zurück