Com a função malloc, podemos alocar memória dinamicamente, ou seja, durante a execução de um programa. A função malloc recebe como argumento um número inteiro que indica a quantidade de bytes que serão alocados na memória. Se a alocação ocorrer com sucesso, malloc retorna um ponteiro para o primeiro byte do bloco alocado, caso contrário, retorna NULL.
Assinatura da função:
void *malloc(size_t n)
Exemplo: Alocando memória para números inteiros
int *p;
p = (int *) malloc(sizeof(int));
A função malloc é muito útil quando estamos implementado estruturas que poderão crescer em tempo de execução, como por exemplo, listas, pilhas e árvores binárias. Um nó em uma lista encadeada poderia ser declarado a partir da seguinte struct
struct no {   
  int value;
  struct no* prox;
};
Durante a execução do programa, podemos criar novos nós na memória fazendo:
(struct no *)malloc(sizeof(struct no));
@CompilouSemErro