Latest web development tutorials

Cのメモリ管理

この章では、Cの動的メモリ管理について説明します。 メモリの割り当てと管理のためのC言語は、いくつかの機能を提供します。 これらの関数は、<stdlib.h>に含まヘッダーファイルに記載されています。

序号函数和描述
1void *calloc(int num, int size);
该函数分配一个带有num个元素的数组,每个元素的大小为size字节。
2void free(void *address);
该函数释放 address 所指向的h内存块。
3void *malloc(int num);
该函数分配一个num字节的数组,并把它们进行初始化。
4void *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, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali 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

上記プログラムは、以下に示すように、単に、malloc関数のcallocを交換する必要があり、書き込みには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, "Zara Ali");

   /* 动态分配内存 */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcpy( description, "Zara ali a DPS student.");
   }
   /* 假设您想要存储更大的描述信息 */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL )
   {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   }
   else
   {
      strcat( description, "She is in class 10th");
   }
   
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );

   /* 使用 free() 函数释放内存 */
   free(description);
}

上記のコードはコンパイルされ、実行されると、次の結果を生成します。

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

あなたは余分なメモリは、strcatは()関数が不十分なため保存されている説明使用可能なメモリのエラーが発生し再割り当てしようとすることはできません。