malloc, calloc, realloc, free - 高レベルメモリ管理

【書式】

#include <stdlib.h> or <malloc.h>

void *malloc(size_t n);

void *calloc(unsigned int nelem, size_t elsize);

void *realloc(void *ptr, size_t size);

void free(void *p);

【解説】

malloc(), calloc(), realloc(), free() は高レベルのメモリ管理をおこな

う関数です。

malloc() はnバイトのメモリ・ブロックをヒープ領域から切り出し、切り出

されたブロックの先頭へのポインタを関数の値として返します。もし、ヒー

プ領域に十分なメモリがない時には、NULLを返します。割り当てられたメモ

リ領域はクリアされません。

calloc()はサイズがelsizeバイトのメモリ・ブロックをnelem 個分確保しま

す。確保された領域はゼロ・クリアされます。

realloc()はmalloc(), calloc(), realloc()で確保したメモリのサイズを

size バイトに変更します。可能ならばptr番地にsizeバイトのメモリを確保

します。ptr番地に十分な空きがない場合は新たな場所にsize バイトのメモ

リを確保し、ptr番地の内容をコピーしたのちptrを解放します。

realloc()のptrにNULLを指定するとmalloc(size)と等価で、sizeバイトの領

域を新たに確保します。 size に0を指定するとfree(ptr)と同じ動作をし、

ptrが指す領域を開放したうえで値NULLを返します。

free()はpが示すメモリ・ブロックを解放します。pはmalloc(), calloc(),

realloc()によって割り付けられたポインタでなければなりません。

【リターン値】

malloc(), calloc()は確保されたメモリ・ブロックへのポインタを返し、確

保できない場合はNULLを返します。

realloc() は再割り当てされたメモリ・ブロックへのポインタを返します。

再割り当てできなかったときには値NULLを返します。

【可搬性】

ANSI, UNIX, DOS窓

【参照】

farmalloc(3), sbrk(3)

【copyright (c) 安江正樹@東海大学理学部物理学科】