logo

Calloc v C

Toto téma bude diskutovat o tom, jak vytvořit dynamickou alokaci paměti pomocí funkce calloc() v programovacím jazyce C. Než projdeme koncepty, proberme dynamickou alokaci paměti v C. Dynamická paměť je procedura programování struktury, která umožňuje uživatelům alokovat paměť za běhu programu. Pomocí dynamické alokace paměti můžeme zvětšit nebo snížit paměť během provádění programu. Tímto způsobem se zabrání plýtvání pamětí počítače. Alokace paměti je rozdělena do dvou částí, kterými jsou malloc() a calloc() funkce.

Calloc v C

A funkce calloc(). je předdefinovaná funkce knihovny, která znamená souvislá alokace paměti . Funkce calloc() se používá k vytvoření více bloků za běhu programu, který má stejnou velikost v paměti. Funkce calloc je definována uvnitř stdlib.h hlavičkový soubor. Má dva parametry, ne. bloků a velikost každého bloku. Když je dynamická paměť alokována pomocí funkce calloc(), vrací základní adresu prvního bloku a každý blok je inicializován 0. A pokud paměť není vytvořena, vrací ukazatel NULL.

Předpokládejme například, že chceme vytvořit tři bloky paměti pomocí funkce calloc(), potřebujeme předat dva parametry, počet bloků (3) a velikost každého bloku (int, char, float atd.). byte. Tímto způsobem vytvoří tři bloky, jejichž velikost je uvnitř paměti počítače stejná.

Syntax

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

Ve výše uvedené syntaxi má funkce calloc() dva parametry. První parametr definuje počet bloků a druhý parametr definuje velikost každého bloku v paměti. Velikost bloků a cast_type může být int, char, float atd.

Vrátit se : Vrací základní adresu prvního bloku do proměnné ptr.

Program pro kontrolu alokace dynamické paměti pomocí funkce calloc().

Pojďme napsat jednoduchý program, který zkontroluje, zda je dynamická paměť alokována v 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; } 

Výstup:

 Memory is created successfully 

Program pro demonstraci použití funkce calloc().

Zvažme vytvoření dynamické alokace paměti pomocí funkce calloc() a uložení dat do paměťových bloků.

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 pro uvolnění dynamické alokace paměti pomocí funkce free().

funkce free(): Funkce free() se používá k uvolnění dynamické paměti, která je vytvořena buď calloc () nebo malloc () funkce. Tyto přidělené paměti nemohou být uvolněny pro své vlastní a budou existovat až do konce programu. Je tedy naší odpovědností uvolnit paměť, kterou lze znovu použít, a proto k uvolnění paměti explicitně používáme funkci free().

Syntax

 free (ptr); 

Zde je free() funkce, která uvolňuje přidělenou paměť pomocí proměnné ptr ukazatele.

Zvažme vytvoření dynamické alokace paměti pomocí funkce calloc() a následné uvolnění obsazeného místa pomocí funkce free() v programu C.

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