logo

C の Calloc

このトピックでは、C プログラミング言語の calloc() 関数を使用して動的メモリ割り当てを作成する方法について説明します。概念を説明する前に、C での動的メモリ割り当てについて説明します。動的メモリは、ユーザーがプログラムの実行時にメモリを割り当てることを可能にする構造プログラミング手順です。動的メモリ割り当てを使用すると、プログラムの実行中にメモリを増減できます。これにより、コンピュータのメモリの無駄が回避されます。メモリ割り当ては、malloc() 関数と calloc() 関数の 2 つの部分に分かれています。

C の Calloc

calloc() 関数 は、以下を表す事前定義されたライブラリ関数です。 連続したメモリ割り当て 。 calloc() 関数は、プログラムの実行時にメモリ内に同じサイズの複数のブロックを作成するために使用されます。 calloc 関数は内部で定義されています。 stdlib.h ヘッダファイル。パラメータは 2 つあります。ブロックの数と各ブロックのサイズ。 calloc() 関数を使用して動的メモリが割り当てられると、最初のブロックのベース アドレスが返され、各ブロックは 0 で初期化されます。また、メモリが作成されない場合は、NULL ポインタを返します。

たとえば、calloc() 関数を使用して 3 つのメモリ ブロックを作成するとします。ブロック数 (3) と各ブロックのサイズ (int、char、float など) の 2 つのパラメータを渡す必要があります。バイト。このようにして、コンピュータのメモリ内に同じサイズの 3 つのブロックが作成されます。

構文

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

上記の構文では、calloc() 関数には 2 つのパラメーターがあります。最初のパラメータは、 ブロック数 2 番目のパラメータは、 各ブロックのサイズ 記憶の中で。ブロックのサイズと Cast_type は、int、char、float などになります。

戻る : 最初のブロックのベースアドレスを ptr 変数に返します。

calloc() 関数を使用して動的メモリが割り当てられていることを確認するプログラム

C で動的メモリが割り当てられているかどうかを確認する簡単なプログラムを書いてみましょう。

プログラム.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; } 

出力:

 Memory is created successfully 

calloc() 関数の使用法を示すプログラム

calloc() 関数を使用して動的メモリ割り当てを作成し、メモリ ブロックにデータを保存することを考えてみましょう。

プログラム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></=>

free()関数を使用して動的メモリ割り当てを解放するプログラム

free() 関数: free() 関数は、作成された動的メモリを解放するために使用されます。 コールク () または マロック () 関数。これらの割り当てられたメモリは解放できず、プログラムが終了するまで存在します。したがって、再利用できるメモリを解放するのは私たちの責任であるため、free() 関数を明示的に使用してメモリを解放します。

構文

 free (ptr); 

ここで、free() は、ポインタ ptr 変数を使用して割り当てられたメモリを解放する関数です。

C プログラムで calloc() 関数を使用して動的メモリ割り当てを作成し、次に free() 関数を使用して占有領域を解放することを考えてみましょう。

リリース.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></=>