概要
calloc関数は、malloc関数で確保して、領域を0で初期化する。
malloc
malloc関数は、動的にメモリ領域を割り当て、そのメモリアドレスを返す関数です。
確保されたメモリ領域には、不定値を持ったオブジェクトが置かれた状態です。
#include <stdlib.h>
void *malloc(size_t size);
memsetで初期化をすることでcallocのように使うことが出来ます。
if (!(p = (char *)malloc(sizeof(char) * 4)))
return (0);
memset(p, '\0', 4);
calloc
malloc関数と異なり、確保された領域の全ビットが自動的に0
で埋められます。
整数型であれば0
で初期化されていると考えて良いですが、他の型の場合は想定と異なる意味を持つかもしれません。たとえば、ポインタの場合、「全ビットが 0」という状態が、ヌルポインタを表すとは限りませんし、浮動小数点型の場合、「全ビットが 0」=「0.0」とはならないかもしれません。
第1引数に要素数を、第2引数に要素1つ分の大きさを指定します。
#include <stdlib.h>
void *calloc(size_t count, size_t size);
if (!(p = (char *)calloc(4, sizeof(char))))
return (0);
参考
ポインタ⑤(動的なメモリ割り当て) | Programming Place Plus C言語編 第35章
BohYoh.com-C/C++ FAQ callocとmallocの違いは何ですか。