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と同じ。