Casting einen Zeiger auf ein int
Schreibe ich meine eigenen Funktionen für malloc
und free
in C für eine Zuordnung. Ich brauche, um die Vorteile der C sbrk()
wrapper-Funktion. Was ich verstehen sbrk()
erhöht das Programm die Daten von Speicherplatz durch die Anzahl der bytes als argument übergeben und verweist auf den Speicherort des Programms brechen.
Wenn ich den folgenden code-snippet:
#define BLOCK_SIZE 20
int x;
x = (int)sbrk(BLOCK_SIZE + 4);
Bekomme ich den compiler-Fehler warning: cast from pointer to integer of different size
. Warum ist das so und ist es trotzdem kann ich warf die Adresse verweist sbrk()
zu einem int
?
Gibt es einen Grund, nicht zu verwenden
Weil int ist 32 bit, Zeiger 64 bit. versuchen Sie, verwenden Sie long int. versuchen Sie, überprüfen, sizeof(int) und sizeof(void*)
void *x;
? Wenn Sie wirklich wollen, eine integral-Typ gibt es intptr_t x = (intptr_t)sbrk...;
aus <stdint.h>
Weil int ist 32 bit, Zeiger 64 bit. versuchen Sie, verwenden Sie long int. versuchen Sie, überprüfen, sizeof(int) und sizeof(void*)
InformationsquelleAutor user3268401 | 2014-03-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil Zeiger und
int
können unterschiedliche Länge, zum Beispiel, auf 64-bit-systemsizeof(void *)
(z.B. Länge des Zeigers) ist normalerweise 8, abersizeof(int)
in der Regel ist 4. In diesem Fall, wenn Sie die Umwandlung eines Zeigers auf einint
und warf es zurück, erhalten Sie einen ungültigen Zeiger anstelle der ursprünglichen Zeiger.Wenn Sie wirklich brauchen, um werfen einen Zeiger auf eine ganze Zahl, Sie sollte es Stimmen, ein
intptr_t
oderuintptr_t
von<stdint.h>
.Vom
<stdint.h>(P)
:intptr_t
und es kompiliert. Der Grund, warum ich versuche zu casten, um eineint
ist, damit kann ich sehen, wenn es mehr Speicherplatz auf dem heap. Wenn in meinem code-snippet oben ist x kleiner als 0 ist, dann gibt es keine mehr Platz auf dem heap.InformationsquelleAutor Lee Duhem