Hallo,
ich möchte mir dynamisch Speicher für ein Array reservieren:
uint16_t *tempArray;
tempArray = malloc(numberOfElements * sizeof(uint16_t));
Dazu folgende Frage: muss ich, wie ich es oben gemacht habe, die
gewünschte Anzahl der Elemente = Größe des Arrays ("numberOfElements")
noch mit der größe des Speicherbedarfs multiplizieren
("sizeof(uint16_t)") oder reicht es, mit malloc die Anzahl der Elemente
zu reservieren? Sprich alloziiert malloc "automatisch" (dadurch das
tempArray bereits uint16_t ist) die korrekte Größe von 10 Byte und würde
in meinem Fall 20Byte reservieren?
malloc hat keine Ahnung was du mit dem Pointer anfängst und das auf der linken Seite vom Gleichheitszeichen ein Pointer auf uint16_t steht. Du musst also wie gezeigt Anzahl Elemente * sizeof(uint16_t) rechnen um die richtige Größe zu kriegen.
bd schrieb: > Sprich alloziiert malloc "automatisch" (dadurch das tempArray bereits > uint16_t ist) die korrekte Größe von 10 Byte und würde in meinem Fall > 20Byte reservieren? Woher sollte es das wissen? Verwende calloc. Das erhält zwei separate Argumente, die Größe eines Elements und die Anzahl der Elemente. Obendrein initialisiert es den angeforderten Speicher mit 0, worum man sich bei malloc selbst kümmern muss.
Oder calloc benutzen. Ist eh meist besser. Da gibt es einen extra-Parameter für die Größe des Datentyps.
Ich danke Euch. War mir halt nicht sicher, aber jetzt klingts auch logisch für mich. Und danke für den Tip mit calloc. Ich werde das dann verwenden.
bd schrieb: > Ich danke Euch. > > War mir halt nicht sicher, aber jetzt klingts auch logisch für mich. Und > danke für den Tip mit calloc. Ich werde das dann verwenden. Da du hier bei im µC Sektor bist, "könnte" das insgesamt eine dumme Idee sein. Je nach dem... "könnte" ist "könnte" und nicht "muss"
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.