logo

Calloc kielessä C

Tässä aiheessa käsitellään dynaamisen muistin varauksen luomista calloc()-funktiolla C-ohjelmointikielessä. Ennen kuin käymme läpi käsitteitä, keskustellaan dynaamisesta muistin varaamisesta C:ssä. Dynaaminen muisti on rakenneohjelmointimenettely, jonka avulla käyttäjät voivat varata muistia ohjelman ajon aikana. Dynaamisen muistin allokoinnin avulla voimme lisätä tai vähentää muistia ohjelman suorittamisen aikana. Tällä tavalla vältytään tietokoneen muistin hukkaamiselta. Muistin varaus on jaettu kahteen osaan, jotka ovat malloc() ja calloc()-funktio.

Calloc kielessä C

A calloc()-funktio on ennalta määritetty kirjastotoiminto, joka tarkoittaa vierekkäinen muistin varaus . Calloc()-funktiota käytetään useiden lohkojen luomiseen samankokoisen ohjelman ajon aikana. Calloc-funktio on määritelty sisällä stdlib.h otsikkotiedosto. Siinä on kaksi parametria, ei. lohkojen määrästä ja kunkin lohkon koosta. Kun dynaaminen muisti allokoidaan calloc()-funktiolla, se palauttaa ensimmäisen lohkon kantaosoitteen ja jokainen lohko alustetaan 0:lla. Ja jos muistia ei luoda, se palauttaa NULL-osoittimen.

kuinka osoittimen viittaus poistetaan kohdassa c

Oletetaan esimerkiksi, että haluamme luoda kolme muistilohkoa calloc()-funktiolla, meidän on välitettävä kaksi parametria, lohkojen lukumäärä (3) ja kunkin lohkon koko (int, char, float jne.) tavu. Tällä tavalla se luo tietokoneen muistiin kolme samankokoista lohkoa.

Syntaksi

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

Yllä olevassa syntaksissa calloc()-funktiolla on kaksi parametria. Ensimmäinen parametri määrittää lohkojen määrä ja toinen parametri määrittää kunkin lohkon koko muistissa. Lohkojen koko ja cast_type voivat olla int, char, float jne.

Palata : Palauttaa ensimmäisen lohkon perusosoitteen ptr-muuttujalle.

Ohjelma dynaamisen muistin tarkistamiseksi on varattu calloc()-funktiolla

Kirjoitetaan yksinkertainen ohjelma tarkistaaksesi, onko dynaaminen muisti varattu C:ssä.

ohjelma.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; } 

Lähtö:

 Memory is created successfully 

Ohjelma, joka havainnollistaa calloc()-funktion käyttöä

Harkitsemme dynaamisen muistin varauksen luomista calloc()-funktiolla ja tietojen tallentamista muistilohkoihin.

Ohjelma 2.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></=>

Ohjelma vapauttaa dynaamisen muistin varauksen free()-funktiolla

free()-funktio: Free()-funktiota käytetään vapauttamaan joko luotu dynaaminen muisti calloc () tai malloc ()-toiminto. Näitä allokoituja muistoja ei voi vapauttaa omiksi, ja ne ovat olemassa ohjelman loppuun asti. Joten meidän vastuullamme on vapauttaa se muisti, jota voidaan käyttää uudelleen, ja siksi käytämme nimenomaisesti free()-funktiota muistin vapauttamiseen.

Syntaksi

 free (ptr); 

Tässä free() on funktio, joka vapauttaa varatun muistin käyttämällä osoittimen ptr-muuttujaa.

Harkitsemme dynaamisen muistin varauksen luomista calloc()-funktiolla ja sitten varatun tilan vapauttamista C-ohjelman free()-funktiolla.

javascript päivämäärä

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></=>