malloc ändert Größe nicht



  • Guten Morgen zusammen,

    ich komme nicht drauf, warum hier immer 8 Byte raus kommt, müsste malloc die größe nicht entsprechend anpassen?

    char *strptr;
    	printf("Vorher: %d\n", sizeof(strptr));
    	strptr = (char *) malloc(sizeof(char) * 10);
    	printf("Nachher: %d\n", sizeof(strptr));
    

    vielen Dank im Voraus


  • Mod

    Du misst die Größe von strptr, also die Größe eines Zeigers. Und bevor du fragt: Wenn du die Größe von *strptr holen würdest, dann wäre das die Größe von dem, worauf strptr zeigt, in diesem Fall also ein char (welcher per Definition die Größe 1 hat), da strptr ein Zeiger auf char ist.



  • Das geht so nicht. Du gibts immer nur die Größe des Zeigers aus, der auf deinem System eben 8 Byte hat. Bevor du jetzt auf die Idee kommst, so etwas wie

    sizeof(*strptr)
    

    zu verwenden: vergiss es, das geht auch nicht. Du musst dir die Größe merken.



  • Hmmm, schade ich dachte wenn ich das Sternchen weglasse misst es den gesamten Speicherbereich. Aber malloc tut hier korrekt was es soll oder? İst es dann nicht vernünftiger eher ein richtiges char Array zu verwenden?



  • Wenn die Größe zur Compile-Zeit bekannt ist, natürlich!



  • Ok Alles klar vielen Dank 👍



  • Wenn das Array soooo groß ist, dass du Probleme mit dem Stack bekommst, nicht.

    Aber das löst nicht so ganz dein Problem.
    Wenn du das Array an eine Funktion weiter gibst, kommt da nur eine Adress an.
    Dann funktioniert das mit dem sizeof auch wieder nicht.



  • @DirkB: Hallo, ja wenn ich direkt ein array verwenden würde kann ich jaa die größe bereits bei der deklaration/definition bestimmen oder(zb. str[10])?

    Korrigiert mich bitte wenn ich falsch liege bin einsteiger in C.



  • Nicht kann sondern musst du.



  • Durch dein

    Kakarott schrieb:

    Hmmm, schade ich dachte wenn ich das Sternchen weglasse misst es den gesamten Speicherbereich. ... İst es dann nicht vernünftiger eher ein richtiges char Array zu verwenden?

    war ich der Meinung, du möchtest dir die Größe von dem Speicher nicht (in einer extra Variable) merken und glaubst daher, ein Array würde dir das einfacher machen.

    Das ist aber nicht so.

    Du musst bei der Definition von einem Array die Größe angeben. Dann kennst du sie und kannst sie dir auch merken.
    Du musst bei malloc die Größe angeben. Dann kennst du sie und kannst sie dir auch merken.
    Denn spätestens wenn du das Array/den Pointer an eine Funktion übergibst, brauchst du diese Information (um sicher arbeiten zu können).


Anmelden zum Antworten