Essa é uma revisão anterior do documento!


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:

   typedef struct {
      int dia, mes, ano; 
   } data;
   data *d;
   d = malloc (sizeof (data));
   d->dia = 31; d->mes = 12; d->ano = 2008;
 

[As aparências enganam: 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 <stdio.h>
#include <stdlib.h>
 
 
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

malloc.1311959365.txt.gz · Última modificação: d/mY H:i por jmurray
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0