Malloc

malloc.png

指定バイト分、メモリ領域を確保する

【書式】
#include <stdlib.h>
void *malloc(size_t size);

【説明】
ヒープメモリから size バイトのブロックを割り当てます。確保されたブロックは 0 クリアされません。
この関数を使うことにより、プログラムで予め配列などを使ってメモリを確保せずに、必要な場所で必要なだけメモリを確保することが出来ます。木構造やリストなど多くのデータ構造は、通常 malloc関数によって動的にメモリを確保します。
malloc関数で確保したメモリは、使用後、必ず free関数で解放してください。

【引数】
size_t size : 確保したいメモリのバイトサイズ
         size_t は stdlib.h の中でtypedefされ、一般にunsignedです。

【戻り値】
成功時 : 確保したメモリブロックを指すポインタ
失敗時 : NULL (メモリ不足により指定サイズ分のメモリが確保できないとき)

(参考) 「void *」 とは
「void *」 は、どのような型のポインタでも指定できる汎用ポインタ型です。
malloc関数で返却されるポインタの型は、malloc関数を使用する場所ごとに異なります。そのため、型の指定が出来ません。よって、この「void *」で「どのような型にするかは後で決めてください。とりあえずポインタを返しますよ。」と宣言するのです。しかし、使用するときには、次の使用例のように、本来の目的の型でキャストしてやるべきでしょう。

【使用例】
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
char *str;

/* 文字列のためのメモリを確保 */
str = (char *)malloc(100);
if(str == NULL) {
printf("メモリが確保できません\n");
exit(EXIT_FAILURE);
}

/* 文字列を入力 */
gets(str);

/* 文字列の表示 */
puts(str);

/* メモリの解放 */
free(str);

return 0;
}

サポートサイト Wikidot.com