メモリに領域を確保する
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);