logo

Калок у Ц

Ова тема ће разговарати о томе како креирати динамичку алокацију меморије користећи цаллоц() функцију у програмском језику Ц. Пре него што прођемо кроз концепте, хајде да продискутујемо динамичку алокацију меморије у Ц. Динамичка меморија је процедура структуралног програмирања која омогућава корисницима да доделе меморију у време извођења програма. Коришћењем динамичке алокације меморије можемо повећати или смањити меморију током извршавања програма. На овај начин избегава се трошење рачунарске меморије. Алокација меморије је подељена на два дела: функције маллоц() и цаллоц().

Калок у Ц

А цаллоц() функција је унапред дефинисана библиотечка функција која означава континуална алокација меморије . Цаллоц() функција се користи за креирање више блокова у време извођења програма који има исту величину у меморији. Цаллоц функција је дефинисана унутар стдлиб.х датотека заглавља. Има два параметра, не. блокова и величине сваког блока. Када се динамичка меморија додели помоћу функције цаллоц(), она враћа основну адресу првог блока, а сваки блок се иницијализује са 0. А ако меморија није креирана, враћа НУЛЛ показивач.

На пример, претпоставимо да желимо да креирамо три блока меморије користећи цаллоц() функцију, потребно је да проследимо два параметра, број блокова (3) и величину сваког блока (инт, цхар, флоат, итд.) у бајт. На тај начин ствара три блока чија је величина иста унутар меморије рачунара.

Синтакса

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

У горњој синтакси, функција цаллоц() има два параметра. Први параметар дефинише број блокова а други параметар дефинише величина сваког блока у сећању. Величина блокова и цаст_типе може бити у инт, цхар, флоат, итд.

Повратак : Враћа основну адресу првог блока у птр променљиву.

нпм цлеан цацхе форце

Програм за проверу динамичке меморије се додељује помоћу функције цаллоц().

Хајде да напишемо једноставан програм да проверимо да ли је динамичка меморија додељена у Ц.

програм.ц

 #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; } 

Излаз:

 Memory is created successfully 

Програм за демонстрацију употребе функције цаллоц().

Хајде да размотримо креирање динамичке алокације меморије користећи цаллоц() функцију и чување података у меморијским блоковима.

Програм2.ц

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

Програм за ослобађање динамичке алокације меморије помоћу функције фрее().

фрее() функција: Функција фрее() се користи за ослобађање динамичке меморије која се такође креира цаллоц () или маллоц () функција. Ове додељене успомене се не могу ослободити сопственим и оне ће постојати до краја програма. Дакле, наша је одговорност да ослободимо ту меморију која се може поново користити, и стога експлицитно користимо функцију фрее() да ослободимо меморију.

Синтакса

како покренути скрипту на Линук-у
 free (ptr); 

Овде је фрее() функција која ослобађа додељену меморију помоћу променљиве показивача птр.

Хајде да размотримо креирање динамичке алокације меморије помоћу функције цаллоц() и затим ослобађање заузетог простора помоћу функције фрее() у Ц програму.

Релеасе.ц

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