Anfängerfrage - malloc
-
hi!
bin C neuling und habe eine grundsätzliche verständnisfrage zu malloc:
wieso funktioniert z.b. dieser code?
char *test; test = (char *) malloc(2 * sizeof(char)); test[0] = 'H'; test[1] = 'a'; test[2] = 'l'; test[3] = 'l'; test[4] = 'o'; printf("%s\n", test);
ich stell speicher für 2 chars zur verfügung und er kann 5 zeichen speichern? hä?
und das beste ist: mit
test = (char *) malloc(0);
funktionierts auch! WARUM? dann brauch ich ja eigentlich immer nur malloc(0), wenn sich die größe anscheinend eh automatisch anpasst...
kann mir da jemand auf die sprünge helfen?
danke im voraus...
-
Glück, sehr viel Glück
malloc() kann durchaus mehr Speicher für dich reservieren als du eigentlich angefordert hast - aber du solltest dich besser nicht darauf verlassen, daß (a) überhaupt Speicher da ist und (b) der Bonusspeicher nicht vom nächsten malloc() neu verteilt wird.
-
Anders Gesagt: Mit dem ersten malloc hast du Speicher für 2 chars reserviert. C hindert dich aber nicht daran, über den reservierten Bereich herauszuschreiben. Du schreibst dir damit nur u.U. was anderes kaputt.
-
alles klar - danke für die prompten antworten!