Speichergröße
-
in meinem prog reserviere/ändere ich mit realloc Speicher. irgendwann später möchte ich wissen, wieviel speicher nun reservierd wurde.
git es so was, wie "memlen"?
-
nein, geht nicht. musst du dir schon selber merken
-
Daniel E, schrieb:
nein, geht nicht. musst du dir schon selber merken
außerdem gleich noch ne Anmerkung: realloc kopiert u.U. die Variablen in einen anderen Speicherbereich um, es wird also der Pointer verändert.
-
Deswegen schreibt man ja auch:
ptr = realloc (...);
mfg
v R
-
virtuell Realisticer schrieb:
Deswegen schreibt man ja auch:
ptr = realloc (...);
ich wuerde
if(srealloc(&ptr,new_size)) { perror("out of memory"); exit(1); }
verwenden,
wobei srealloc so aussieht:int srealloc(void** ptr, size_t size) { void* t=realloc(*ptr,size); if(t) { *ptr=t; return 0; } return 1; }
-
Ok, du hast en Wrapper gemacht, der die Fehlerbehandlung schon durchfuehrt, ist
natuerlich schoener.mfg
v R
-
virtuell Realisticer schrieb:
Ok, du hast en Wrapper gemacht, der die Fehlerbehandlung schon durchfuehrt, ist
natuerlich schoener.ohne wrapper ist realloc leider unbrauchbar.
denn immer ein
{
void* t=realloc(ptr,size);
if(!t) { fehler(); }
ptr=t;
}ist bloedsinn (zuviel redundanz)
-
Danke für alle Antworte, auch wenn die erste alles schon sagte. dass mt realloc kenn ich natürlich
-
mit der fkt _msize(void*object) kannst du dir die grösse eines allokierten zurückgeben lassen!
-
friend schrieb:
mit der fkt _msize(void*object) kannst du dir die grösse eines allokierten zurückgeben lassen!
hmmm .... diese Funktion kennt mein C-Compiler nicht.... was mache ich falsch?
-
mady schrieb:
friend schrieb:
mit der fkt _msize(void*object) kannst du dir die grösse eines allokierten zurückgeben lassen!
hmmm .... diese Funktion kennt mein C-Compiler nicht.... was mache ich falsch?
Nichts, diese Funktion ist nicht Bestandteil von ANSI-C
mfg
v R
-
Danke! das ist genau, was ich suchte.
-
leider ist _msize auch nicht das richtige, denn
Der zurückgelieferte Wert kann größer sein als der, der bei der Speicherreservierung angefordert wurde.
und das führt zu zugriffsverletzungen