検索
  • サインイン
  • サインアップ
パスワードのリセットが成功しました

興味のあるプロジェクトをフォローし、それらに関する最新ニュースをチェックしてください

Cメモリ管理

コレクション 205
リーディング 91673
更新時間 2016-09-11

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

シリアル番号関数と説明
1void *calloc(int num, int size);
この関数はnum要素を含む配列を割り当てます。各要素のサイズはsizeですバイト。
2void free(void *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 AliDescription: 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, "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 AliDescription: Zara ali a DPS student.She is in class 10th

追加のメモリを再割り当てせずに試すことができます。説明を保存するために使用できるメモリが不足しているため、strcat() 関数はエラーを生成します。

ホットAIツール
Undress AI Tool
Undress AI Tool

脱衣画像を無料で

AI Clothes Remover
AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undresser.AI Undress
Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

Stock Market GPT
Stock Market GPT

AIを活用した投資調査により賢明な意思決定を実現

人気のツール
メモ帳++7.3.1
メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版
SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6
ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版
SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)