Malloc -funksjon i C

Malloc -funksjon i C

“Innenfor C -språket er minnetildeling et veldig kjent konsept, og vi har mange funksjoner for å tildele minner til forskjellige mutable, i.e., dynamisk minne, statisk minne osv. Malloc () -funksjonen til C er en av disse funksjonene som ikke bare tildeler minne til en spesifikk mutable, men som også returnerer en adressepeker der minnet er lagret. Denne artikkelen vil hjelpe deg med bruk av Malloc i C mens du bruker Ubuntu 20.04 System. Gjør systemet ditt oppdatert før du hopper på implementeringen av C -koden fordi det vil hjelpe deg å kjøre kodene på skallet jevnt. Dermed har vi oppdatert det så langt, og det ba oss legge til passordet for brukeren som for øyeblikket fungerer. Vi ga det et passord, og prosessen var ferdig på noen få sekunder.”

Vi kommer til å implementere denne artikkelen på C -språk; Dermed krever vi at kompilatoren blir installert ved vår slutt. Linux har “GCC” C -verktøy som en kompilator som kan installeres med “Apt”, som vi gjorde i det viste bildet. Nå kan du gjøre kodefeilen din gratis i løpet av sekunder.

Før vi kommer i gang med C -eksempelet vårt, må det være en fil der vi legger til C -kodene for sammenstilling og utførelse. Derfor oppretter vi en fil "-fil.C ”. Filen må ha en ".C ”utvidelse i endene for å identifisere den som en C -fil.

Eksempel 01

Innenfor denne kodeillustrasjonen vil vi bruke Malloc () -funksjonen for å tildele minne til en variabel ved hjelp av en konstant verdi og vise hvis minnet er tildelt vellykket eller ikke. Vi må starte denne C -koden med de viktigste C -biblioteksoverskriftene som må ha i en kode, og uten disse vil koden vår være ubrukelig å utføre. Koden inneholder en Main () -funksjon som skal utføre alt vi trenger for minnetildeling og feil vises hvis minnet ikke blir tildelt vellykket. Funksjonen starter fra initialiseringen av en konstant heltallvariabel “A” som tom.

Vi har spesifisert en lang type dobbel pekervariabel “V” for å tildele minne ved hjelp av Malloc () -funksjonen. Denne malloc () -funksjonen bruker den konstante heltallvariabelen “A” for minnetildeling til pekeren “M.”Det er en" if-elv "-uttalelse som brukes til å sjekke om minnet ble tildelt pekervariabelen“ M ”eller ikke klarte å tildele minnet. Så det er den "hvis" -delen som vil sjekke om verdien av "m" er null eller ikke. Hvis det er "null", vil printf () -funksjonen brukt i den demonstrere en feilmelding, i.e., “Ingen minne” med en linjepause på slutten ved å bruke “\ n.”

Også "exit (-1)" -funksjonen vil avslutte. Mens den andre delen ville bruke 2 printf () funksjonsuttalelser, i.e., Den første uttalelsen for å vise verdien av en konstant heltallvariabel “A” og den andre uttalelsen for å vise suksessmeldingen med det spesifiserte minnet. La oss lagre koden vår før vi får den til å samle kildekode for utførelse.

#inkludere
#inkludere
int main ()
const int a = "";
lang dobbel *m = (lang dobbel *) malloc (størrelse av (lang dobbel) *a);
if (m == null)
printf ("Feil: ingen minne \ r \ n");
Avslutt (-1);
annet
printf ("verdi = %d \ n", a);
printf ("flott, minne: %lf \ n", *m;

Ved samling viste det noen advarsler, men vi kan ignorere dem et øyeblikk. Ved utførelse av den kompilerte koden fikk vi en feilmelding “Ingen minne” fordi vi ikke hadde initialisert noen heltallverdi til variabelen “A” for minnetildeling.

Vi oppdaterer den samme kildekoden ved å legge til en heltallverdi “500” for en variabel “A” slik at vi kan tilordne et eksakt minne til en pekervariabel “M.”Lagre denne oppdaterte koden for nå.

#inkludere
#inkludere
int main ()
const int a = 500;
lang dobbel *m = (lang dobbel *) malloc (størrelse av (lang dobbel) *a);
if (m == null)
printf ("Feil: ingen minne \ r \ n");
Avslutt (-1);
annet
printf ("verdi = %d \ n", a);
printf ("flott, minne: %lf \ n", *m;

Når vi sammenstiller denne oppdaterte koden, fikk vi ingen feil, ikke engang en advarsel som ble vist før. Etter utførelse av denne kompilerte og oppdaterte koden, fikk vi verdien av variabel “A” vist sammen med minnet som er tildelt i desimalpunkter, i.e., Det viser ikke en eksakt minneverdi.

Eksempel 02

La oss se godt på et annet eksempel for å tildele minne til en spesifikk variabel. Start dette eksemplet med bruk av “stdio.H ”og“ Stdlib.H ”overskrifter før noe annet. Main () -metoden fikk utførelsen av utførelsen fra erklæringen om en karaktertypepeker “A” -variabel. Den aller neste linjen bruker Malloc () -funksjonen for å lage et minne for en karakterpeker i størrelse 10. Dette er en innledende minnetildeling for pekeren “a.”

Etter dette er StrcPy () -funksjonen her for å kopiere en rekke ord til en variabel peker “a.”Bruken av printf () er et must for å vise strengverdien vår som nettopp er lagret til variabel peker“ A ”sammen med minneadressen på skallet. Spesialtegnet “%s” betegner strengverdien, mens “%u” betegner adressen som skal vises. Etter dette omfordeler vi et nytt minne til den samme karaktertypen Pointer -variabelen “A” i størrelse 20 ved å bruke realloc () -funksjonen til C -språket. Det er bruk av strcat () -funksjonen for å sammenkoble en variabel peker “a” med en ny strengverdi “språk.”

Etter dette benyttet vi oss igjen for å vise den nylig sammenkoblede strengverdien sammen med adressen til en variabel peker "a.”Etter dette prøvde vi den“ gratis ”funksjonen på variabel peker“ A ”for å frigjøre det tildelte minnet til det. La oss først lagre denne koden og deretter prøve GCC -kompilatoren på skallet for å samle den raskt.

#inkludere
#inkludere
int main ()
char *a;
A = (char *) malloc (10);
Strcpy (a, "Velkommen til C");
printf ("verdi = %s, adresse: %u \ n", a, a);
strcat (a, "språk");
printf ("verdi = %s, adresse: %u \ n", a, a);
gratis (a)

Nå skal vi sammenstille koden vår med "GCC" som presentert under. Selv om bruken av "strcpy" -funksjonen viser en advarsel, hindrer det ikke oss i å utføre koden.

Etter å ha samlet filen.C C -fil, vi har utført den på konsollapplikasjonen med "./en.ut ”spørring av Linux for å kjøre kodefilene. Du vil se en utgang av to linjer som viser to forskjellige verdier for en variabel peker “A”, men den samme adressen, i.e., Gamle og oppdaterte verdier. Dette betyr at det tildelte minnet ble oppdatert, men adressen forblir den samme for en variabel “a.”

Konklusjon

Det er det! Nå vil du kunne lage kodene dine for å tilordne minne til en spesifikk variabel i systemet ditt ved å bruke Malloc () -funksjonen til C.