C言語 動的メモリを0クリアして確保 - stdlib.h - [ calloc ]
2008.11.01 Saturday | by LRESULT
動的メモリの確保の第二弾は、calloc()です。
※ 第一弾 malloc()は、こちら。
※ 第三弾 realloc()は、こちら。
※ 第四弾 free()は、こちら。
calloc()も、メモリを動的に確保し、配列のように扱えますが、
malloc()との違いは、動的メモリを確保した時点で、0で初期化してくれる(0クリア)ところです。
calloc()も、動的メモリを確保して必要なくなれば、必ず解放処理( free() )をしなければなりません。
書式 | void* calloc( size_t num, size_t size ) |
---|---|
機能 | 動的メモリの確保をして0で初期化する |
引数 | size_t num : 確保する領域の個数 size_t size : 1つの領域のバイト数 |
戻り値 | 成功すると、確保した領域のポインタを返し 失敗すると、NULLを返します。 |
malloc()との違いは、引数num には領域の個数、引数size には1つの領域のバイト数を
指定するところです。malloc()の場合には、バイト数でまとめて取得していました。
calloc()は、0で初期化してくれる所がmalloc()との大きな違いなので、 malloc()とcalloc()で動的メモリを確保し、本当に0クリアされているかを見てみます。 |
---|
#include <stdio.h> for( i=0; i<10; i++ ){ free( mbuf ); return 0; |
i=0, mbuf[i]=-842150451, cbuf[i]=0 i=1, mbuf[i]=-842150451, cbuf[i]=0 i=2, mbuf[i]=-842150451, cbuf[i]=0 i=3, mbuf[i]=-842150451, cbuf[i]=0 i=4, mbuf[i]=-842150451, cbuf[i]=0 i=5, mbuf[i]=-842150451, cbuf[i]=0 i=6, mbuf[i]=-842150451, cbuf[i]=0 i=7, mbuf[i]=-842150451, cbuf[i]=0 i=8, mbuf[i]=-842150451, cbuf[i]=0 i=9, mbuf[i]=-842150451, cbuf[i]=0 |
---|
環境によって、表示される値は変わると思いますが、 このように、malloc()で確保した領域には不定な値が入り、 calloc()で確保した領域は、0クリアされている事が確認出来ました。 |