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!