Como faço para declarar um vetor dinâmico em C?
Como faço para declarar um vetor dinâmico em C?
Opa, Natan! Tudo beleza?
Para declarar um vetor dinâmico em C, você pode utilizar a função malloc()
da biblioteca stdlib.h
. Essa função aloca uma quantidade específica de memória durante a execução do programa.
Aqui está um exemplo de como declarar um vetor dinâmico em C:
#include <stdio.h>
#include <stdlib.h>
int main() {
int tamanho;
int *vetor;
printf("Digite o tamanho do vetor: ");
scanf("%d", &tamanho);
vetor = (int *) malloc(tamanho * sizeof(int));
if (vetor == NULL) {
printf("Erro ao alocar memória!");
return 1;
}
// Agora você pode usar o vetor normalmente
// Exemplo de atribuição de valores
for (int i = 0; i < tamanho; i++) {
vetor[i] = i + 1;
}
// Exemplo de impressão dos valores
for (int i = 0; i < tamanho; i++) {
printf("%d ", vetor[i]);
}
// Não se esqueça de liberar a memória alocada
free(vetor);
return 0;
}
Nesse exemplo, o usuário digita o tamanho do vetor desejado e a função malloc()
é utilizada para alocar a memória necessária. Em seguida, é feita a atribuição de valores ao vetor e a impressão dos mesmos. Por fim, a função free()
é utilizada para liberar a memória alocada.
Espero ter ajudado e bons estudos!
O que acontece caso a memória não seja liberada?
Olá Natan!
Durante a execução de um programa, ao solicitar memória, o que vc está fazendo é solicitando ao sistema operacional uma porção de memória para utilizar, mas quando alocamos memória de maneira dinâmica (na Heap) e não liberamos essa memória ao fim do programa ocorre o tão famoso "vazamento de memória".
Esse vazamento ocorre com a seguinte lógica: O sistema operacional aloca a memória para um programa em execução e a libera apenas quando quando é solicitado, ela não pode simplesmente limpar uma memória que está sendo usada. Mas quando alocamos e não liberamos, aquela memória fica como se fosse um "zumbi", sem nenhum programa à utilizando, mas sem o sistema operacional poder liberá-la. Caso seja um programa muito grande ou que é executado uma grande quantidade de vezes, vai haver cada vez mais essas espaços de memória "zumbis" (vazados), podendo até ocupar toda a memória disponível do hardware. Assim sendo, não é APENAS uma boa prática, mas também uma OBRIGAÇÃO do desenvolvedor realizar essa liberação, para não distribuir um software com uma anomalia dessas.
Em C++ já existem bibliotecas que realizam esse tipo de alocação de maneira segura, como, por exemplo, o "vector".
Nota: Os sistemas operacionais atuais conseguem reconhecer quando um espaço de memória é vazado, mas não imediatamente, ou seja, caso seu programa vaze memória o sistema operacional vai reconhecer e liberá-la, mas isso pode demorar de segundos a minutos.