これで動かない理由がわからない

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void kakuho(char **buf)
{
    *buf = malloc(sizeof(char)*100); //確保したメモリのポインタを渡す
}

int main()
{
    char **buf;

    kakuho(buf); //ポインタのポインタを渡す
    strcpy(*buf, "hello"); //確保したメモリに文字列をコピーする
    printf("%s\n", *buf); //文字列を表示する
    free(*buf); //夏帆したメモリを解放する

    return 0;
}