PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Malloc und sizeof()?



OliverH
29-11-2007, 17:29
Hallo, ich wundere mich grade über das Verhalten der sizeof() funktion:


#include <stdio.h>
#include <stdlib.h>

int main() {
char * ptr;
ptr = (char *) malloc(40 * sizeof(char));
printf("Size: %i\n", sizeof(ptr));
return 0;
}

Meiner Meinung nach, sollte eine Größte von 40 Bytes ausgegben werden.
In der Realität sieht es aber so aus:


oliver@castor:~$ gcc malloc-test.c
oliver@castor:~$ ./a.out
Size: 4
oliver@castor:~$

Gibt es dafür eine Erklärung? Wenn ja, welche?

Ich experimentiere derzeit auch noch mit der realloc() Funktion, und möchte meinen Speicher erweitern (in einer Schleife), als Debug Info, wollte ich mir die aktuelle größe meiner buffers mit sizeof() ausgeben lassen, nur steht der dort auch immer auf 4.

Gruß
Oli

Boron
29-11-2007, 18:48
Die Variable ptr ist ein Zeiger. Die sind auf deinem System eben 4 Bytes (32 Bits) breit. Deswegen "Size: 4" :).
Auf einem 64 Bit Betriebssystem würde dann halt 8 rauskommen.

Du wolltest aber die Größe des zuvor angeforderten Speichers. Also die 40 Bytes. Die wirst du aber mit sizeof() nicht raus bekommen.

anda_skoa
29-11-2007, 19:15
Schon alleine deswegen nicht, weil sizeof zur Compilezeit ausgewertet wird und malloc erst später zu Laufzeit :)

Ciao,
_

OliverH
29-11-2007, 20:26
okay, die Frage ist dann, wie kann ich die aktuelle Größe eines Spicherbereiches, den ich mit malloc und realloc angefordert habe, überprüfen?
Hilft da nur seperates Mitzählen mit beispielsweise einem Integer? :rolleyes:

anda_skoa
30-11-2007, 10:51
Ja, am besten in einer Struktur zusammen fassen.

Ciao,
_