C言語のmalloc()完全ガイド:実践例で理解する動的メモリ割り当て
C言語のmalloc()とは
C標準ライブラリのmalloc()(memory allocationの略)は、実行時に連続したメモリブロックを動的に確保します。関数はそのブロックの先頭を指すvoid*ポインタを返し、必要なポインタ型にキャストして使用します。
構文
ptr = (cast_type *)malloc(byte_size);
各項目:
ptr:指定したcast_typeのポインタbyte_size:割り当てるバイト数
例:
ptr = (int *)malloc(50);
この呼び出し後、50バイトが確保され、ptrがその先頭を指します。
実践例
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); /* 15個分の整数領域を確保 */
if (ptr != NULL) {
*(ptr + 5) = 480; /* 6番目の整数に480を代入 */
printf("Value of the 6th integer is %d", *(ptr + 5));
}
return 0;
}
出力:
Value of the 6th integer is 480
重要なポイント
sizeof(*ptr)をsizeof(int)の代わりに使うと、後でポインタの型を変更してもコードが壊れにくい- システムが要求を満たせない場合、
malloc()はNULLを返す。メモリ使用前に必ずNULLチェックを行う - 割り当てられたブロックは連続しており配列として扱える。元のポインタ値を変更しないよう、添字演算子よりポインタ演算が推奨される
malloc()は文字、構造体、ユーザー定義型を含むあらゆるデータ型で動作し、Cプログラマーに柔軟なメモリ管理を提供します。
C言語