
Click-me
Eu olhando os meus posts no fórum do slackbr de trás para frente encontrei este post que ajudei o cidoloco criando uma matriz que fosse alocada dinamicamente.
#include <stdio.h>
typedef struct{
int **xy;
int linhas;
int colunas;
} Matriz;
int le_matriz(Matriz matriz)
{
int i,j;
for(i=0; i< matriz.linhas; i++)
{
for(j=0; j< matriz.colunas; j++ )
{
printf("[%i][%i]=",i,j);
scanf("%i",&matriz.xy[i][j]);
}
}
}
int add_matriz(Matriz matriz[], int *size_matriz)
{
int linhas,colunas,i,pos;
pos = *size_matriz-1;
//posicao que vamos trabalhar
//realoca caso ela nao tenha sido alocada
if(pos != 0)
{
matriz=(Matriz *)realloc(sizeof(Matriz)*(pos+1));
}
printf("\nInforme o numero de linhas:");
scanf("%i",&linhas);
matriz[pos].linhas = linhas;
printf("\nInforme o numero de colunas:");
scanf("%i",&colunas);
matriz[pos].colunas = colunas;
//int **xy;
//xy=(int **)malloc(linhas*sizeof(int *));
matriz[pos].xy=(int **)malloc(sizeof(int)*linhas);
//complexo quem disse que seria facil =P ( aconselho você a tentar fazer um desenho sempre ajuda =D )
for(i=0; i<linhas; i++)
{
matriz[pos].xy[i] = (int *)malloc(sizeof(int)*colunas);
}
//toda a estrutura eh tratada como ponteiro
le_matriz(matriz[pos]);
size_matriz++;
}
void print_matriz(Matriz matriz[],int pos)
{
printf("\n Matriz[%i]\n",pos);
int i,j;
for(i=0; i< matriz[pos].linhas; i++)
{
for(j=0; j< matriz[pos].colunas; j++ )
{
printf("[%i][%i]=%i",i,j,matriz[pos].xy[i][j]);
}
}
}
int main(int argc, char **argv)
{
int size_matriz=1; // contador do total de elementos da matriz
Matriz *matriz; // Matriz que possui dois ponteiros que podem ser alocados com quantas fileiras ou colunas quiserem
/*por alguns problemas milagrosos ( não sei explicar direito e sempre bom alocar a primeira posição de um ponteiro antes de passar para qualquer função e depois sequencialmente realocar, sei lah se tem algo relacionado com a utilização da região de memória stack de forma recursiva, sei lah se é estouro de stack bom não sei explicar direito, da mesma forma que a liberação da memoria depois de seu uso é muito interessante =P.)*/
matriz=(Matriz *)malloc(sizeof(Matriz)*size_matriz);
add_matriz(matriz,&size_matriz);
//le a primeira matriz de tamanho variado
print_matriz(matriz,size_matriz-1);
add_matriz(matriz,&size_matriz);
//le a segunda matriz de tamanho variado
print_matriz(matriz,size_matriz-1);
}