logo

C'de Calloc

Bu konu, C programlama dilinde calloc() işlevini kullanarak dinamik bellek ayırmanın nasıl oluşturulacağını tartışacaktır. Kavramlara geçmeden önce, C'deki dinamik bellek tahsisini tartışalım. Dinamik bellek, kullanıcıların bir programın çalışma zamanında belleği tahsis etmesine olanak tanıyan bir yapı programlama prosedürüdür. Dinamik bellek tahsisini kullanarak bir programın yürütülmesi sırasında belleği artırabilir veya azaltabiliriz. Bu sayede bilgisayar belleğinin israfının önüne geçilir. Bellek tahsisi malloc() ve calloc() işlevi olmak üzere iki kısma ayrılır.

C'de Calloc

A calloc() işlevi anlamına gelen önceden tanımlanmış bir kütüphane işlevidir. bitişik bellek tahsisi . Bellekte aynı boyuta sahip bir programın çalışma zamanında birden fazla blok oluşturmak için calloc() işlevi kullanılır. İçinde bir calloc işlevi tanımlanmıştır. stdlib.h başlık dosyası. İki parametresi var, hayır. blok sayısı ve her bloğun boyutu. Calloc() fonksiyonu kullanılarak dinamik bellek tahsis edildiğinde, ilk bloğun temel adresini döndürür ve her blok 0 ile başlatılır. Eğer bellek oluşturulmazsa bir NULL işaretçisi döndürür.

Örneğin, calloc() fonksiyonunu kullanarak üç bellek bloğu oluşturmak istediğimizi varsayalım; iki parametreyi, blok sayısını (3) ve her bloğun boyutunu (int, char, float, vb.) aktarmamız gerekiyor. bayt. Bu sayede bilgisayar hafızasında boyutları aynı olan üç blok oluşturur.

Sözdizimi

Java nesnesini json'a dönüştürün
 ptr = (cast_type *) calloc ( number_of_blocks, size_of_block); 

Yukarıdaki sözdiziminde calloc() fonksiyonunun iki parametresi vardır. İlk parametre şunları tanımlar: blok sayısı ve ikinci parametre şunları tanımlar: her bloğun boyutu bellekte. Blokların boyutu ve cast_type int, char, float vb. olabilir.

Geri dönmek : İlk bloğun temel adresini ptr değişkenine döndürür.

Dinamik belleği kontrol edecek program, calloc() işlevi kullanılarak tahsis edilir

C'de dinamik belleğin ayrılıp ayrılmadığını kontrol eden basit bir program yazalım.

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

Çıktı:

 Memory is created successfully 

calloc() fonksiyonunun kullanımını gösteren program

Calloc() fonksiyonunu kullanarak dinamik bellek tahsisi oluşturmayı ve verileri bellek bloklarına kaydetmeyi düşünelim.

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

Free() işlevini kullanarak dinamik bellek tahsisini serbest bırakan program

ücretsiz() işlevi: Bir free() işlevi, oluşturulan dinamik belleği serbest bırakmak için kullanılır. kalloc () veya malloc () işlev. Ayrılan bu hafızalar kendi başlarına serbest bırakılamazlar ve programın sonuna kadar var olacaklardır. Dolayısıyla, yeniden kullanılabilecek belleği serbest bırakmak bizim sorumluluğumuzdadır ve bu nedenle, belleği serbest bırakmak için açıkça free() işlevini kullanırız.

Sözdizimi

 free (ptr); 

Burada free(), ptr değişkenini kullanarak ayrılan belleği serbest bırakan bir fonksiyondur.

C programındaki calloc() işlevini kullanarak dinamik bellek tahsisi oluşturmayı ve ardından free() işlevini kullanarak işgal edilen alanı serbest bırakmayı düşünelim.

Sürüm.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></=>