realloc() in C gebruiken: Syntaxis, best practices & voorbeeld
Wat is realloc()
realloc() is een C standaardbibliotheekfunctie die een bestaand geheugenblok herschikt. Het vergroot of verkleint het blok terwijl de inhoud behouden blijft. Dit maakt dynamisch geheugenbeheer efficiënter, vooral wanneer de benodigde grootte tijdens runtime verandert.
Syntaxis
ptr = realloc(ptr, newSize);
Hier wijst ptr naar een eerder toegewezen blok, en newSize is de gewenste grootte in bytes. Na de aanroep wijst ptr naar de eerste byte van het nieuwe blok. De functie kopieert de oorspronkelijke data naar de nieuwe locatie en vrijgeeft het oude blok als de herallocatie slaagt.
Belangrijke punten om te onthouden
- Als
realloc()slaagt, kan de geretourneerde pointer hetzelfde zijn als de oorspronkelijke of een nieuw adres. - Als de functie faalt, retourneert het
NULLen laat het oorspronkelijke blok ongewijzigd. - Wijs het resultaat altijd toe aan een tijdelijke pointer om het oorspronkelijke adres niet te verliezen bij falen.
- Na een succesvolle herallocatie, geef de pointer maar één keer vrij.
Voorbeeld – Formaat van een stringbuffer wijzigen
#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); // vergroot buffersize if (!tmp) { free(buf); // origineel blok nog steeds geldig perror("realloc"); return EXIT_FAILURE; } buf = tmp; strcat(buf, " in C"); printf("%s\n", buf); free(buf); return EXIT_SUCCESS; }
Voorbeeld – Alloceren en herschikken van een integerarray
#include <stdio.h> #include <stdlib.h> int main(void) { int *arr = malloc(10 * sizeof(int)); if (!arr) { perror("malloc"); return EXIT_FAILURE; } /* ... array gebruiken ... */ int *tmp = realloc(arr, 50 * sizeof(int)); if (!tmp) { free(arr); perror("realloc"); return EXIT_FAILURE; } arr = tmp; printf("Array resized successfully\n"); free(arr); return EXIT_SUCCESS; }
Praktische tips
- Gebruik
size_tvoor grootte-argumenten om teken-gerelateerde bugs te vermijden. - Bij het verkleinen van een blok, wees je bewust dat data buiten de nieuwe grootte wordt verworven.
- Controleer altijd de retourwaarde voordat je de pointer gebruikt.
- Gebruik
free()precies één keer voor elke succesvolle allocatie.
C Taal
- Essentiële gids: wanneer en hoe veilig een brandblustoestel te gebruiken
- Verfspuiters beheersen: een professionele gids voor gladde, veilige dekking
- Thermistor Gebruik Gemaakt Eenvoudig: Stap-voor-Stap Arduino Handleiding
- Freesmes Slijper Technieken Beheersen: Een Praktische Gids
- Azure DevOps Benefiteren: Bewezen Praktijken Voor Versnelde Levering
- Hoe molybdeen de moderne industrie vormt: toepassingen, voordelen en leveringsdynamiek
- Verander je voltooide puzzel in een tijdloos meesterwerk met epoxyhars
- calloc() in C: Nul-geïnitialiseerde geheugenallocatie en een praktisch voorbeeld
- Beheersing van C's free() functie: Praktische gids & voorbeeld
- Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
- VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp