malloc
malloc é um termo da computação que designa uma função da biblioteca padrão das linguagens de programação C e C++ para requisitar alocação dinâmica de memória. É uma forma abreviada de escrever memory allocation (alocação de memória).
Uso[editar | editar código-fonte]
A função malloc possui o seguinte protótipo:
void *malloc(size_t size);
Recebendo como parâmetro o tamanho em bytes da região a ser alocada e retornando um ponteiro para a área alocada. Se ocorrer um erro ao alocar memória, retorna um ponteiro para NULL.
O exemplo de código na linguagem C a seguir pede a alocação dinâmica de um vector de inteiros com vinte e cinco posições, altera o valor na posição dez e depois libera a área de memória.
int *vector = NULL; /* declaração do ponteiro */
vector = (int*) malloc(25 * sizeof(int)); /* alocação de memória para o vector */
vector[10] = 34; /* altera o valor da posição dez para trinta e quatro */
free(vector); /* liberta a área de memória alocada */
Problemas[editar | editar código-fonte]
O uso de memória dinâmica administrada pelo próprio programador abre a possibilidade para a ocorrência de problemas relativos ao mau uso da memória que muitas vezes geram vulnerabilidades de segurança e erros de difícil localização. Entre os problemas mais comuns estão:
- Vazamento de memória: ter uma região de memória alocada porém sem ponteiros para ela o que impede sua libertação
- Buffer overflow: escrever na memória para além do limite da área alocada
- Uso de áreas liberadas: escrever numa região da memória que já foi libertada por free
- Falha do malloc: se não houver memória disponível, o malloc irá falhar
Há ferramentas especializadas para detectar problemas desta natureza como o Valgrind.