realloc() in C: Syntax, Best Practices & Beispiel
Was ist realloc()?
realloc() ist eine C-Standardbibliotheksfunktion, die einen bestehenden Speicherblock in der Größe verändert. Sie erweitert oder verkleinert den Block, wobei der Inhalt erhalten bleibt. Dies macht dynamisches Speichermanagement effizienter, besonders wenn sich die benötigte Größe zur Laufzeit ändert.
Syntax
ptr = realloc(ptr, newSize);
Hier zeigt ptr auf einen zuvor allokierten Block, und newSize ist die gewünschte Größe in Bytes. Nach dem Aufruf zeigt ptr auf das erste Byte des neuen Blocks. Die Funktion kopiert die Originaldaten an den neuen Speicherort und gibt den alten Block frei, falls die Reallokation gelingt.
Wichtige Hinweise
- Bei Erfolg kann der zurückgegebene Zeiger identisch mit dem Original oder eine neue Adresse sein.
- Bei Fehlschlag gibt die Funktion
NULLzurück und lässt den ursprünglichen Block unangetastet. - Weisen Sie das Ergebnis immer einem temporären Zeiger zu, um die Originaladresse bei Fehlschlag nicht zu verlieren.
- Nach erfolgreicher Reallokation den Zeiger nur einmal freigeben.
Beispiel – String-Puffer vergrößern
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char *buf = malloc(10);
if (!buf) {
perror("malloc");
return EXIT_FAILURE;
}
strcpy(buf, "Programming");
printf("%s\n", buf);
char *tmp = realloc(buf, 20); // Puffer vergrößern
if (!tmp) {
free(buf); // Originalblock noch gültig
perror("realloc");
return EXIT_FAILURE;
}
buf = tmp;
strcat(buf, " in C");
printf("%s\n", buf);
free(buf);
return EXIT_SUCCESS;
}
Beispiel – Integer-Array allokieren und vergrößern
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = malloc(10 * sizeof(int));
if (!arr) {
perror("malloc");
return EXIT_FAILURE;
}
/* ... Array nutzen ... */
int *tmp = realloc(arr, 50 * sizeof(int));
if (!tmp) {
free(arr);
perror("realloc");
return EXIT_FAILURE;
}
arr = tmp;
printf("Array erfolgreich vergrößert\n");
free(arr);
return EXIT_SUCCESS;
}
Praktische Tipps
- Bevorzugen Sie
size_tfür Größenargumente, um Vorzeichen-bedingte Bugs zu vermeiden. - Beim Verkleinern eines Blocks beachten: Daten jenseits der neuen Größe gehen verloren.
- Rückgabewert immer prüfen vor Verwendung des Zeigers.
free()genau einmal für jede erfolgreiche Allokation aufrufen.
C Sprache
- Wie Molybdän die moderne Industrie formt: Nutzung, Vorteile und Versorgungsdynamik
- Azure DevOps nutzen: Bewährte Practices für beschleunigte Delivery
- VHDL-Funktionen meistern: Praktischer Leitfaden für effizientes Design
- Verwandeln Sie Ihr fertiges Puzzle in ein zeitloses Meisterwerk mit Epoxidharz
- calloc() in C: Null-initialisierte Speicherallokation mit praktischem Beispiel
- C's free() Funktion meistern: Praktischer Leitfaden & Beispiel
- Wesentlicher Leitfaden: Wann und wie man einen Feuerlöscher sicher einsetzt
- Farbsprayer meistern: Profi-Leitfaden für gleichmäßige, sichere Beschichtung
- Thermistor (NTC) einfach nutzen: Schritt-für-Schritt Arduino-Anleitung
- Schleiftechniken für Werkzeugschleifmaschinen meistern: Praktischer Leitfaden