Ciao a tutti!

Devo scrivere un programma in C che mi consenta di determinare il minimo di due numeri interi dati in ingresso, dichiarando esclusivamente variabili di tipo puntatore a intero.

CODICE:

#include <stdio.h>

int main()
{
int *a, *b;

printf("a: "); scanf("%p", &a);
printf("b: "); scanf("%p", &b);

//Stampa il contenuto di a
printf("a vale: %d", *a);

//Stampa il contenuto di b
printf("b vale: %d", *b);

//Stampa indirizzo di memoria di a
printf("Indirizzo di a: %p", a);

//Stampa indirizzo di memoria di b
printf("Indirizzo di b: %p", b);

if(*a > *b)
printf("Tra %d e %d il minimo è %d", *a, *b, *b);
else
printf("Tra %d e %d il minimo è %d", *a, *b, *a);

return 0;
}

Utilizzo una derivata di Ubuntu come O.S.
La compilazione va a buon fine, ma quando lo eseguo e inserisco i due numeri il compilatore mi dice:
Errore di segmentazione (core dump creato)

Dov'è che ho sbagliato?