メモリに領域を確保する

malloc

【書式】

#include <stdlib.h>
void *malloc(size);

【引数】

確保したいメモリのバイトサイズ

【戻り値】

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

【機能】

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

【インクルードファイル】

stdlib.h または malloc.h

【必要追加ライブラリ】

なし

使用例

〈サンプルプログラム〉

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

int main(void)
{
    char *pString;

    /* パス名分のメモリを確保します */
    pString = malloc(_MAX_PATH);

    if(NULL == pString)
    {
        printf("メモリが確保できませんでした\n");
    }
    else
    {
        printf("パス名分のメモリが確保できました\n");
        free(pString);
        printf("メモリを開放しました\n");
    }

    return 0;
}

「void *」とは

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

str = (char *)malloc(100);