Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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 NULL en 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_t voor 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

  1. Essentiële gids: wanneer en hoe veilig een brandblustoestel te gebruiken
  2. Verfspuiters beheersen: een professionele gids voor gladde, veilige dekking
  3. Thermistor Gebruik Gemaakt Eenvoudig: Stap-voor-Stap Arduino Handleiding
  4. Freesmes Slijper Technieken Beheersen: Een Praktische Gids
  5. Azure DevOps Benefiteren: Bewezen Praktijken Voor Versnelde Levering
  6. Hoe molybdeen de moderne industrie vormt: toepassingen, voordelen en leveringsdynamiek
  7. Verander je voltooide puzzel in een tijdloos meesterwerk met epoxyhars
  8. calloc() in C: Nul-geïnitialiseerde geheugenallocatie en een praktisch voorbeeld
  9. Beheersing van C's free() functie: Praktische gids & voorbeeld
  10. Impure functies in VHDL gebruiken: FSM-leesbaarheid en onderhoudbaarheid verbeteren
  11. VHDL-functies onder de knie krijgen: een praktische gids voor efficiënt ontwerp