Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Vetor dinâmico

Como faço para declarar um vetor dinâmico em C?

3 respostas
solução!

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

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.