Escreva um programa para fazer a alocação dinâmica dos blocos de dados conforme solicitado abaixo:
Matriz de inteiros de dimensão
.
Matriz de inteiros de dimensão
Passo 1
O enunciado pede para criar um programa em C que faça allocação dinâmica de uma matriz de inteiros de dimensão
. O conteúdo principal aqui é alocação dinâmica de memória usando as funções malloc() e free().
Passo 2
Precisamos declarar um ponteiro duplo para int, que vai apontar para um vetor de ponteiros (cada ponteiro representa o início de uma linha da matriz).
Alocamos o vetor de 10 ponteiros com malloc: usamos .
Alocamos o vetor de 10 ponteiros com malloc: usamos .
Passo 3
Para cada uma das 10 linhas, alocamos um bloco de memória capaz de guardar 10 inteiros, usando malloc com .
Após cada chamada a malloc(), verificamos se o ponteiro retornado é NULL. Em caso de erro, liberamos tudo que já havia sido alocado e saímos do programa.
Após cada chamada a malloc(), verificamos se o ponteiro retornado é NULL. Em caso de erro, liberamos tudo que já havia sido alocado e saímos do programa.
Passo 4
Se tudo der certo, a matriz está pronta para uso. Quando não precisarmos mais da matriz, libertamos a memória linha a linha e depois liberamos o vetor de ponteiros.
O programa acima pode ser estendido para inicializar, preencher e imprimir valores, mas a parte essencial de alocação e liberação de memória já está descrita.
O programa acima pode ser estendido para inicializar, preencher e imprimir valores, mas a parte essencial de alocação e liberação de memória já está descrita.
Resposta
#include <stdio.h>\n#include <stdlib.h>\n\nint main() {\n int *mat;\n int i, j;\n\n / Aloca vetor de 10 ponteiros (cada um vai apontar para uma linha) */\n mat = malloc(10 * sizeof(int ));\n if (mat == NULL) {\n fprintf(stderr, “Erro: falha ao alocar ponteiros das linhas\n”);\n return 1;\n }\n\n / Para cada linha, aloca espaço para 10 inteiros /\n for (i = 0; i < 10; i++) {\n mat[i] = malloc(10 * sizeof(int));\n if (mat[i] == NULL) {\n fprintf(stderr, “Erro: falha ao alocar linha %d\n”, i);\n / Se der erro, libera o que foi alocado até agora /\n for (j = 0; j < i; j++) {\n free(mat[j]);\n }\n free(mat);\n return 1;\n }\n }\n\n / Aqui você pode inicializar e usar a matriz, por exemplo: /\n for (i = 0; i < 10; i++) {\n for (j = 0; j < 10; j++) {\n mat[i][j] = i * 10 + j; / só um exemplo de uso /\n }\n }\n\n / Libera a memória: primeiro cada linha, depois o vetor de ponteiros */\n for (i = 0; i < 10; i++) {\n free(mat[i]);\n }\n free(mat);\n\n return 0;\n}