malloc(2), calloc(2), memset(2)
MAN
void *malloc(size_t size); void *calloc(size_t nmemb, size_t size);
malloc() 関数は size バイトを割り当て、 割り当てられたメモリに対する ポインタを返す。メモリの内容は初期化されない。 size が 0 の場合、 malloc() は NULL または free() に後で渡しても問題の起こらない 一意なポインタ値を返す。
calloc() 関数は size バイトの要素 nmemb 個からなる配列にメモリを 割り当て、割り当てられたメモリに対するポインタを返す。 メモリの内容は数値ゼロ (全ビットが 0 のバイト) にセットされる。 nmemb か size が 0 の場合、 calloc() は NULL または free() に後で渡しても問題の起こらない一意な ポインタ値を返す。
例
#include <stdlib.h> #include <stdio.h> #include <string.h> int main(void) { int *ip; int *ip2; ip = malloc(sizeof(int)); printf("%d\n", *ip); // 不定 memset(ip, 0, sizeof(int)); printf("%d\n", *ip); // 0 ip2 = calloc(1, sizeof(int)); printf("%d\n", *ip2); // 0 return 0; }
mallocしてmemsetでゼロクリアすれば、callocと同じ。