関数に確保したいメモリのサイズを引数に指定すると、その分のメモリ領域が確保され、そのメモリ領域へのポインタが返される。よる制限やハードウェアによる制限などで、メモリが確保できない場合も想定される。関数で解放する必要がある。メモリの解放を行わない場合に、メモリの再利用が行われない。処理を行ったとき(メモリリーク)、いずれ使用可能なメモリ量を使い果たしてしまい、プログラムが異常終了したり、システムが極端に重くなったりする。引数にはメモリ領域のサイズそ指定する。新しいメモリ領域が確保できたとき、新メモリ領域へのポインタが返される。関数は、次のようなプロセスでメモリの再確保を行う。新しく確保するメモリ領域は、旧メモリ領域に比べて小さければ、旧メモリ領域を縮小して、旧メモリ領域へのポインタをそのまま返す。逆に、新しく確保するメモリ領域は、旧領域に比べて大きければ、メモリ上の連続して空いているところで、指定されたサイズの新メモリ領域を確保する。新メモリ領域を確保できた場合は、次に進む。旧メモリ領域から新メモリ領域にデータをコピーする。データをそのままコピーするため、旧メモリ領域が大きいほど、コピーに要する時間も長くなる。旧メモリ領域を解放する。新メモリ領域へのポインタを返す。関数のメモリ再確保のプロセスのように、メモリの再確保に失敗した場合は、旧メモリ領域は解放されないので、必要に応じて自分で解放する必要がある。個分に拡大する例である。確保したメモリだけである。する場合は定義されていないので、何が起こるのかはわからない。