Hier ist ein Code, den ich für GCC
Compiler schrieb.Interessantes Verhalten von malloc()
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p = (int *)malloc(9 * sizeof(char));
p[0] = 2147483647;
p[1] = 2147483647;
p[2] = 1025;
printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
Die Ausgabe ist wie folgt:
1, 2147483647, 2147483647, 1025
Meine Frage ist, obwohl ich nur 9 Bytes auf den Zeiger zugeordnet, Es scheint, die 12 alle Bytes zu verwenden. Das Ergebnis ist dasselbe (abgesehen von einer Compiler-Warnung), wenn ich (char *)
anstelle von (int *) umsetze. Ist die Zuordnung malloc()
ein Vollkreis? d. h. es teilt immer in Vielfachen des Datentyps des Zeigers zu, unabhängig davon, was wir zugeordnet haben? oder ist es implementierungsspezifisch?
Sollten Bits by Bytes? PS - Du brauchst die Besetzung nicht. –
Sie haben etwas nicht legales getan und niemand bemerkt. macht es legal? –
Danke. Ich korrigierte –