logo

Calloc i C

Dette emnet vil diskutere hvordan du oppretter dynamisk minneallokering ved å bruke calloc()-funksjonen i programmeringsspråket C. Før vi går gjennom konseptene, la oss diskutere den dynamiske minneallokeringen i C. Dynamisk minne er en strukturprogrammeringsprosedyre som lar brukere allokere minnet under kjøretiden til et program. Ved å bruke dynamisk minneallokering kan vi øke eller redusere minnet under kjøringen av et program. På denne måten unngår den sløsing med datamaskinminne. En minneallokering er delt inn i to deler er malloc() og calloc() funksjon.

Calloc i C

EN calloc() funksjon er en forhåndsdefinert bibliotekfunksjon som står for sammenhengende minnetildeling . En calloc()-funksjon brukes til å lage flere blokker under kjøretiden til et program som har samme størrelse i minnet. En calloc-funksjon er definert inne i stdlib.h header-fil. Den har to parametere, nei. av blokker og størrelsen på hver blokk. Når det dynamiske minnet er allokert ved hjelp av calloc()-funksjonen, returnerer det baseadressen til den første blokken, og hver blokk initialiseres med 0. Og hvis minne ikke opprettes, returnerer den en NULL-peker.

Anta for eksempel at vi ønsker å lage tre minneblokker ved å bruke calloc()-funksjonen, må vi sende to parametere, et antall blokker (3) og størrelsen på hver blokk (int, char, float, etc.) i byten. På denne måten lager den tre blokker med samme størrelse inne i datamaskinens minne.

Syntaks

 ptr = (cast_type *) calloc ( number_of_blocks, size_of_block); 

I syntaksen ovenfor har calloc()-funksjonen to parametere. Den første parameteren definerer antall blokker og den andre parameteren definerer størrelsen på hver blokk i minne. Størrelsen på blokkene og cast_type kan være i int, char, float, etc.

Komme tilbake : Den returnerer basisadressen til den første blokken til ptr-variabelen.

Program for å sjekke dynamisk minne er allokert ved hjelp av calloc()-funksjonen

La oss skrive et enkelt program for å sjekke om det dynamiske minnet er allokert i C.

program.c

 #include #include int main() { int *ptr; /* use calloc() function to define the no. of blocks and size of each blocks. */ ptr = calloc (4, sizeof(int)); // here 4 is the no. of block and int is the size of block if (ptr != NULL) { printf (' Memory is created successfully 
'); } else printf (' Memory is not created '); return 0; } 

Produksjon:

 Memory is created successfully 

Program for å demonstrere bruken av calloc()-funksjonen

La oss vurdere å lage dynamisk minneallokering ved å bruke calloc()-funksjonen og lagre data i minneblokkene.

Program2.c

 #include #include #include void main() { int n, *ptr, *p, i, sum = 0; /* n = number of elements, *ptr = store base address of the dynamic memory, *p store temporary address of the *ptr */ printf (' Enter the number of elements: '); scanf (' %d', &n); // it takes number of elements // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // assign the address of ptr if (ptr == NULL) // it checks whether the memory is allocated { printf (' Memory is not allocated. '); exit(0); // exit from the program } printf (' Enter %d numbers 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( '%d', ptr); sum="sum" + *ptr; ptr++; } printf (' elements are: '); for (i="1;" i <="n;" %d', *p); p++; 
 the addition of is: %d ', sum); getch(); pre> <p> <strong>Output:</strong> </p> <pre> Enter the number of elements: 5 Enter 5 numbers 1 2 3 4 5 Elements are: 1 2 3 4 5 The addition of the elements is: 15 </pre> <h3>Program to release dynamic memory allocation using free() function</h3> <p> <strong>free() function:</strong> A free() function is used to release the dynamic memory which is created either <strong>calloc</strong> () or <strong>malloc</strong> () function. These allocated memories cannot be freed to their own, and they will exist till the end of the program. So, it is our responsibility to release that memory that can be reused, and hence we explicitly use the free() function to release the memory.</p> <p> <strong>Syntax</strong> </p> <pre> free (ptr); </pre> <p>Here free() is a function that releases the allocated memory using the pointer ptr variable.</p> <p>Let&apos;s consider creating dynamic memory allocation using the calloc() function and then releasing occupied space using the free() function in the C program.</p> <p> <strong>Release.c</strong> </p> <pre> #include #include #include void main() { int n, *ptr, *p, i, sum = 0; printf (&apos; Define the number of elements to be entered: &apos;); scanf (&apos; %d&apos;, &amp;n); // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // store the base address in p if (ptr == NULL) { printf (&apos; Out of memory &apos;); exit(0); } printf (&apos; Enter the elements 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( '%d', ptr); sum="sum" + *ptr; ptr++; } printf (' elements are: '); for (i="1;" i <="n;" %d', *p); p++; 
 the addition of is: %d ', sum); free(ptr); * use free() function to release dynamic memory allocation getch(); pre> <p> <strong>Output:</strong> </p> <pre> Define the number of elements to be entered: 6 Enter the elements 2 4 6 8 10 12 Elements are: 2 4 6 8 10 12 The addition of the elements is: 42 </pre> <hr></=></pre></=>

Program for å frigjøre dynamisk minneallokering ved å bruke free()-funksjonen

free() funksjon: En free()-funksjon brukes til å frigjøre det dynamiske minnet som er opprettet enten calloc () eller malloc () funksjon. Disse tildelte minnene kan ikke frigjøres til sine egne, og de vil eksistere til slutten av programmet. Så det er vårt ansvar å frigjøre det minnet som kan gjenbrukes, og derfor bruker vi eksplisitt funksjonen free() for å frigjøre minnet.

Syntaks

 free (ptr); 

Her er free() en funksjon som frigjør det tildelte minnet ved hjelp av pointer ptr-variabelen.

primtall java

La oss vurdere å lage dynamisk minneallokering ved å bruke calloc()-funksjonen og deretter frigjøre okkupert plass ved å bruke free()-funksjonen i C-programmet.

Release.c

 #include #include #include void main() { int n, *ptr, *p, i, sum = 0; printf (&apos; Define the number of elements to be entered: &apos;); scanf (&apos; %d&apos;, &amp;n); // use calloc syntax to create memory block of int data type ptr = (int *) calloc (n, sizeof(int)); p = ptr; // store the base address in p if (ptr == NULL) { printf (&apos; Out of memory &apos;); exit(0); } printf (&apos; Enter the elements 
&apos;, n); for ( i = 1; i <= n; i++) { scanf ( \'%d\', ptr); sum="sum" + *ptr; ptr++; } printf (\' elements are: \'); for (i="1;" i <="n;" %d\', *p); p++; 
 the addition of is: %d \', sum); free(ptr); * use free() function to release dynamic memory allocation getch(); pre> <p> <strong>Output:</strong> </p> <pre> Define the number of elements to be entered: 6 Enter the elements 2 4 6 8 10 12 Elements are: 2 4 6 8 10 12 The addition of the elements is: 42 </pre> <hr></=>