Resposta: a função malloc() retorna um ponteiro genérico (tipo void) e por isso é que precisa, geralmente, ser convertido (casting).
int *p
*p = (int *) malloc (sizeof(int))
Resposta: o problema está na segunda linha. O erro é que o retorno da função malloc() é um endereço de memória e deve ser aplicado diretamente ao ponteiro, mas a segunda linha está como *p. Para fazer o código funcionar bastaria tirar o asterisco.
Solução: ADMediaTurma.c
Solução: ADSelecionaPrimos.c