A função malloc (abreviatura de memory allocation) aloca um bloco de bytes consecutivos na memória do computador e devolve o endereço desse bloco. O número de bytes é especificado no argumento da função. No seguinte fragmento de código, malloc aloca 1 byte: char ptr; ptr = malloc (1); scanf ("%c", ptr); O endereço devolvido por malloc é do tipo "genérico" void *. O programador armazena esse endereço num ponteiro de tipo apropriado. No exemplo acima, o endereço é armazenado num ponteiro-para-char. Para alocar um tipo-de-dado que ocupa vários bytes, é preciso recorrer ao operador sizeof, que diz quantos bytes o tipo especificado tem: #include #include typedef struct { int dia, mes, ano; } data; int main(int argc, char *argv[]) { data d; data *datapointer; datapointer = &d; datapointer = malloc (sizeof (data)); datapointer->dia = 31; datapointer->mes = 12; datapointer->ano = 2008; printf("%d/%d%/%d\n",datapointer->dia,datapointer->mes,datapointer->ano); system("PAUSE"); return 0; } [As aparências enganam: [[sizeof|sizeof]] não é uma função.] Overhead. Cada invocação de malloc aloca um bloco de bytes consecutivos maior que o solicitado: os bytes adicionais são usados para guardar informações administrativas sobre o bloco de bytes (essas informações permitem que o bloco seja corretamente desalocado, mais tarde, pela função free). O número de bytes adicionais pode ser grande, mas não depende do número de bytes solicitado no argumento de malloc. Não é recomendável, portanto, invocar malloc repetidas vezes com argumento muito pequeno. É preferível alocar um grande bloco de bytes e retirar pequenas porções desse bloco na medida do necessário. #include #include char *IntToChar(int *Number){ char retorno; char *ptr = &retorno; ptr = malloc((int)sizeof(Number)); itoa((int)Number , ptr,10); return ptr; } int main(int argc, char *argv[]) { printf("%s \n",IntToChar(1000)); system("PAUSE"); return 0; } Teoria retirada do site http://www.ime.usp.br/~pf/algoritmos/aulas/aloca.html