1
resposta

matriz dinamica

include <stdio.h>

include <stdlib.h>

int linhas = 5; int colunas = 10;

int main(){

int** matriz;

matriz = malloc(sizeof(int*) * linhas);

for(int i = 0; i < linhas; i++) { matriz[i] = malloc(sizeof(int) * (colunas+1)); }

for(int i = 0; i<linhas;i++){ free(matriz[i]); }

free(matriz);

}

1 resposta

Olá!

Para alocar uma matriz dinamicamente em C, você pode utilizar o conceito de alocação dinâmica de memória com a função malloc. No seu código, você está alocando corretamente a matriz dinâmica utilizando um array de ponteiros para inteiros.

No entanto, você está alocando um espaço adicional para cada linha da matriz com o código sizeof(int) * (colunas+1). Isso não é necessário, pois você já definiu o número de colunas como 10. Portanto, você pode alocar cada linha da matriz com sizeof(int) * colunas.

Além disso, você está liberando a memória da matriz imediatamente após alocá-la, o que não faz muito sentido. A liberação de memória deve ser feita apenas quando você não precisar mais utilizar a matriz.

Aqui está o código corrigido:

#include <stdio.h>
#include <stdlib.h>

int linhas = 5;
int colunas = 10;

int main() {
    int** matriz;

    matriz = malloc(sizeof(int*) * linhas);

    for(int i = 0; i < linhas; i++) {
        matriz[i] = malloc(sizeof(int) * colunas);
    }

    // Utilize a matriz aqui...

    for(int i = 0; i < linhas; i++) {
        free(matriz[i]);
    }

    free(matriz);

    return 0;
}

Dessa forma, você terá uma matriz dinâmica alocada corretamente e poderá utilizá-la no restante do seu programa. Lembre-se de sempre liberar a memória alocada quando não precisar mais dela.

Espero ter ajudado e bons estudos!