まず、malloc関数の基本的な構文を見てみましょう。
ptr = (cast_type*) malloc(size);
ここで、ptr
は割り当てられたメモリブロックへのポインタを格納するための変数です。cast_type
は割り当てるメモリの型を指定します。size
は必要なメモリのバイト数です。
malloc関数は、指定されたバイト数のメモリを割り当て、その先頭アドレスをptr
に返します。もしメモリの割り当てに失敗した場合は、ptr
はNULLになります。
以下に、malloc関数の使用例をいくつか示します。
例1: int型の配列の動的な割り当て
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
int* numbers;
printf("配列の要素数を入力してください: ");
scanf("%d", &n);
// メモリの割り当て
numbers = (int*) malloc(n * sizeof(int));
if (numbers == NULL) {
printf("メモリの割り当てに失敗しました。");
return 1;
}
printf("要素を入力してください:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
printf("入力された要素は:\n");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
// メモリの解放
free(numbers);
return 0;
}
この例では、ユーザーに配列の要素数を入力させ、それに基づいてint型の配列を動的に割り当てています。最後に、入力された要素を表示し、メモリを解放しています。
例2: 構造体の動的な割り当て
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[50];
int age;
} Person;
int main() {
int n;
Person* people;
printf("構造体の数を入力してください: ");
scanf("%d", &n);
// メモリの割り当て
people = (Person*) malloc(n * sizeof(Person));
if (people == NULL) {
printf("メモリの割り当てに失敗しました。");
return 1;
}
printf("データを入力してください:\n");
for (int i = 0; i < n; i++) {
printf("名前: ");
scanf("%s", people[i].name);
printf("年齢: ");
scanf("%d", &people[i].age);
}
printf("入力されたデータは:\n");
for (int i = 0; i < n; i++) {
printf("名前: %s, 年齢: %d\n", people[i].name, people[i].age);
}
// メモリの解放
free(people);
return 0;
}
この例では、ユーザーに構造体の数を入力させ、それに基づいてPerson型の構造体配列を動的に割り当てています。データの入力と表示の後に、メモリを解放しています。
以上がmalloc関数の基本の説明です。これを参考にして、記事を執筆してみてください。