Probleme bei Speicherreservierung mit realloc
-
Ich habe einen Zeiger deklariert
float *zgr;
für den einmal Speicher durch calloc reserviert wird (hier für 100 Werte):
zgr = calloc(100, sizeof(float));
und anschließend möchte ich den Speicherbereich so vergrößern:
zgr = realloc(zgr, 200*sizeof(float));
Also doppelt so groß...allerdings bekomme ich immer den NULL-Zeiger zurück wenn ich realloc aufrufe. Ich dachte erst, dass nicht genug Speicher da ist, doch ich kann mit calloc am Anfang mehr als 1000 Einheiten (6000 Bytes) erfolgreich reservieren.
Ansonsten verwendet das Programm keinen Speicher vom Heap.Am merkwürdigsten dabei ist, wenn der angeforderte Speicher durch realloc kleiner ist (z.B. nur 50 Einheiten) schlägt die Reservierung trotzdem fehl.
Weiß jemand woran das liegen könnte?
-
haste 'zgr' auch nicht verändert?
-
Es ist auch keine gute Idee dem an realloc() übergebenen Zeiger gleich den Rückgabewert von realloc() zuzuweisen. Das ist zwar hier nicht das Problem, aber angewöhnen sollte man sich das nicht.
-
Warum soll man das nicht machen?
Ich hab das auch so in Büchern wie
C von A bis Z und C in 21 Tagen so gelernt
-
Simonek schrieb:
Warum soll man das nicht machen?
falls realloc '0' zurückgibt, verlierst du die referenz auf den bereits vorhandenen speicher
Simonek schrieb:
Ich hab das auch so in Büchern wie
C von A bis Z und C in 21 Tagen so gelerntdas zweite kenne ich nicht.
aber ersteres ist bekannterweise müll (voller fehler)...
-
Naja..."müll" ist schon etwas drastisch ausgedrückt...
Was kannst Du denn an Büchern empfehlen?
-
Simonek schrieb:
Was kannst Du denn an Büchern empfehlen?
das hier z.b: http://www.oreilly.com/catalog/cinanut/
und das: http://www.oreilly.com/catalog/pcp3/
und das: http://www.amazon.com/Expert-Programming-Peter-van-Linden/dp/0131774298