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! 👍


Anmelden zum Antworten