目次から探す
malloc関数の応用例
malloc関数
は、動的なメモリの確保に利用される便利な関数です。
ここでは、malloc関数
の応用例として、動的な配列の作成と構造体の動的なメモリ確保について説明します。
動的な配列の作成
動的な配列の作成は、プログラム実行中に必要な要素数が変動する場合や、大きなデータを扱う場合に特に有用です。
malloc関数
を使用することで、必要な要素数に応じてメモリを動的に確保することができます。
以下に、動的な配列の作成の例を示します。
#include <stdio.h>
#include <stdlib.h>
int main() {
int size;
int* array;
printf("配列の要素数を入力してください: ");
scanf("%d", &size);
// メモリの動的確保
array = (int*)malloc(size * sizeof(int));
if (array == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
// 配列の要素に値を代入
for (int i = 0; i < size; i++) {
array[i] = i + 1;
}
// 配列の要素を表示
printf("配列の要素: ");
for (int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("\n");
// メモリの解放
free(array);
return 0;
}
このプログラムでは、ユーザーに配列の要素数を入力してもらい、その要素数に応じてメモリを動的に確保しています。
確保したメモリには、1から要素数までの値を代入し、最後に配列の要素を表示しています。
最後に、メモリを解放することを忘れないようにしましょう。
構造体の動的なメモリ確保
構造体は、複数の異なるデータ型をまとめて扱うためのデータ構造です。
構造体の動的なメモリ確保を行うことで、必要なだけの構造体を作成することができます。
以下に、構造体の動的なメモリ確保の例を示します。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int id;
char name[20];
int age;
} Person;
int main() {
int num;
Person* people;
printf("作成する構造体の数を入力してください: ");
scanf("%d", &num);
// メモリの動的確保
people = (Person*)malloc(num * sizeof(Person));
if (people == NULL) {
printf("メモリの確保に失敗しました。\n");
return 1;
}
// 構造体の情報を入力
for (int i = 0; i < num; i++) {
printf("構造体%dの情報を入力してください:\n", i + 1);
printf("ID: ");
scanf("%d", &(people[i].id));
printf("名前: ");
scanf("%s", people[i].name);
printf("年齢: ");
scanf("%d", &(people[i].age));
}
// 構造体の情報を表示
printf("入力された構造体の情報:\n");
for (int i = 0; i < num; i++) {
printf("構造体%dの情報:\n", i + 1);
printf("ID: %d\n", people[i].id);
printf("名前: %s\n", people[i].name);
printf("年齢: %d\n", people[i].age);
}
// メモリの解放
free(people);
return 0;
}
このプログラムでは、ユーザーに作成する構造体の数を入力してもらい、その数に応じてメモリを動的に確保しています。
確保したメモリには、各構造体の情報を入力し、最後に入力された構造体の情報を表示しています。
最後に、メモリを解放することを忘れないようにしましょう。
以上が、malloc関数
の応用例として、動的な配列の作成と構造体の動的なメモリ確保の説明です。
動的なメモリの確保を活用することで、柔軟なプログラミングが可能になりますので、ぜひ活用してみてください。
次のページmalloc関数の注意点