C 言語プログラミングにおける動的メモリ割り当て

CCBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

C 言語のプログラミングでは、配列の初期サイズを事前に常に把握しているわけではありません。このような場合、必要なときにのみメモリを割り当てる方法である動的メモリ割り当てを使用します。malloc() は、C 言語のプログラミングで使用される関数であり、実行時に使用される配列または変数に必要な特定量のメモリを割り当てます。この実験では、malloc() を使用して動的にメモリを割り当て、その後 free() を使用してメモリ空間を解放する方法を学びます。

注:コーディングを練習し、gcc を使用してコンパイルおよび実行する方法を学ぶには、自分で ~/project/main.c ファイルを作成する必要があります。

cd ~/project
## main.c を作成する
touch main.c
## main.c をコンパイルする
gcc main.c -o main
## main を実行する
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c(("C")) -.-> c/BasicsGroup(["Basics"]) c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/PointersandMemoryGroup(["Pointers and Memory"]) c/BasicsGroup -.-> c/variables("Variables") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/PointersandMemoryGroup -.-> c/pointers("Pointers") c/PointersandMemoryGroup -.-> c/memory_address("Memory Address") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/variables -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/for_loop -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/pointers -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/memory_address -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/function_declaration -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/user_input -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} c/output -.-> lab-123283{{"C 言語プログラミングにおける動的メモリ割り当て"}} end

必要なヘッダーファイルをインクルードする

このステップでは、プログラムに必要なヘッダーファイルをインクルードします。

#include <stdio.h>
#include <stdlib.h>

main() 関数を定義する

このステップでは、main() 関数を定義します。この関数では、プログラムに必要な変数を宣言します。

int main()
{
    int n, i, *ptr, sum = 0;

    printf("\n要素数を入力してください:");
    scanf("%d", &n);

malloc() を使って動的にメモリを割り当てる

このステップでは、malloc() を使って動的にメモリを割り当てます。割り当てるメモリのサイズは、要素数と各要素のサイズの積を sizeof() 演算子を使って求めます。

ptr = (int *) malloc(n * sizeof(int));

if(ptr == NULL)
{
    printf("\nエラー!メモリが割り当てられませんでした。");
    exit(0);
}

割り当てたメモリに値を格納する

このステップでは、ループを使って割り当てたメモリに値を格納します。

for(i = 0; i < n; i++)
{
    printf("\n要素 %d を入力してください:", i + 1);
    scanf("%d", ptr + i);
    sum += *(ptr + i);
}

値を表示する

このステップでは、格納された値を表示します。

printf("\n入力された要素は:");
for(i = 0; i < n; i++)
{
    printf("%d ", *(ptr + i));
}

メモリを解放する

このステップでは、free() を使って割り当てたメモリを解放します。

free(ptr);

まとめ

この実験では、malloc() を使って動的にメモリを割り当て、free() を使ってメモリ空間を解放する方法を学びました。main() 関数で変数を宣言し、malloc() を使ってメモリを割り当てる方法を学びました。また、割り当てたメモリ空間にデータを格納し、格納された値を表示し、その後 free() を使って割り当てたメモリを解放する方法も学びました。