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