Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cでの動的メモリ割り当てとは何ですか?


ここでは、Cでの動的メモリ割り当てとは何かを説明します。Cプログラミング言語は、メモリの割り当てと管理のためのいくつかの機能を提供します。これらの関数は、ヘッダーファイルにあります。メモリ割り当てのための次の関数。

関数 説明
void * calloc(int num、int size); この関数は、 numの配列を割り当てます それぞれのサイズがバイト単位の要素がサイズになります。
void free(void * address); この関数は、アドレスで指定されたメモリブロックのブロックを解放します。
void * malloc(int num); この関数は、 numの配列を割り当てます バイトを初期化せずに残します。
void * realloc(void * address、int newsize); この関数は、メモリを再割り当てして newsizeまで拡張します 。

メモリを動的に割り当てる

プログラミング中に配列のサイズを知っていれば、それは簡単で、配列として定義できます。たとえば、任意の人の名前を保存するには、最大100文字まで使用できるため、次のように定義できます-

char name[100];

しかし、ここで、保存する必要のあるテキストの長さがわからない状況を考えてみましょう。たとえば、トピックに関する詳細な説明を保存したい場合などです。ここでは、必要なメモリ量を定義せずに文字へのポインタを定義する必要があります。後で、要件に基づいて、次の例に示すようにメモリを割り当てることができます-

サンプルコード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Adam a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

出力

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

同じプログラムをcalloc();を使用して作成できます。唯一のことは、次のようにmallocをcallocに置き換える必要があることです-

calloc(200, sizeof(char));

したがって、完全に制御でき、メモリの割り当て中に任意のサイズ値を渡すことができます。これは、一度サイズを定義すると変更できない配列とは異なります。

メモリ位置のサイズ変更

プログラムが出力されると、オペレーティングシステムはプログラムによって割り当てられたすべてのメモリを自動的に解放しますが、メモリが不要になった場合の良い習慣として、関数free()を呼び出してそのメモリを解放する必要があります。

または、関数realloc()を呼び出すことにより、割り当てられたメモリブロックのサイズを増減できます。上記のプログラムをもう一度確認して、realloc()関数とfree()関数を使用してみましょう-

サンプルコード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Adam a DPS student.");
   }
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcat( description, "He is in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
   /* release memory using free() function */
   free(description);
}

出力

Name = Adam
Description: Adam a DPS student.He is in class 10th

余分なメモリを再割り当てせずに上記の例を試すことができます。strcat()関数は、説明に使用可能なメモリがないためにエラーを出します。


  1. 動的IPアドレスとは何ですか?

    動的IPアドレスは、各接続またはノードに自動的に割り当てられるIPアドレスです。 、スマートフォン、デスクトップPC、ワイヤレスタブレットなどのネットワークの。このIPアドレスの自動割り当ては、DHCPサーバーと呼ばれるものによって実行されます。 DHCPサーバーによって割り当てられたIPアドレスは、動的と呼ばれます。 ネットワークへの将来の接続では異なることが多いためです。 動的IPアドレスの「反対」は、静的IPアドレス(手動で構成されたもの)と呼ばれます。 動的IPアドレスはどこで使用されますか? ほとんどのホームユーザーとビジネスユーザーのルーターにISPによって割り当てられる

  2. Cプログラミングでの静的メモリ割り当てとはどういう意味ですか?

    メモリは次の2つの方法で割り当てることができます- 静的メモリ割り当て 静的変数は、固定サイズの割り当てられたスペースの1つのブロックで定義されます。一度割り当てられると、解放されることはありません。 プログラムで宣言された変数にメモリが割り当てられます。 アドレスは「&」演算子を使用して取得でき、ポインタに割り当てることができます。 メモリはコンパイル時に割り当てられます。 スタックを使用して、メモリの静的割り当てを維持します。 この割り当てでは、メモリが割り当てられると、メモリサイズは変更できません。 効率は劣ります。 変数の最終的なサイズは、