Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marcoacaguiar

[] função realloc

Recommended Posts

Galera, tô com um problema na função de realocação (estou usando-a para aloca e realocar). O usuario entra com as dimensoes de uma matriz bidimensional, mas caso ele tente aumentar as dimensoes da matriz da erro. Para diminuir da certinho.

Codigo:

 

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

#define ERRO1 "Erro de alocação do vetor de ponteiros"
#define ERRO2 "Erro de alocação das linhas"

int menu(void);
int **alocaMatriz(int **,int ,int );
void preencheMatriz(int **,int ,int );
void imprimeMatriz(int **,int ,int );
void desalocaMatriz(int **,int ,int );

int main()
{
int **ppmatriz=NULL;
int nl=0, nc=0;
while(1)
{
switch(menu())
{
case 1:
system("CLS");
printf("Entre com o numero de linhas:");
scanf("%d",&nl);
printf("Entre com o numero de colunas:");
scanf("%d",&nc);
ppmatriz=alocaMatriz(ppmatriz,nl,nc);
break;
case 2:
preencheMatriz(ppmatriz,nl,nc);
break;
case 3:
imprimeMatriz(ppmatriz,nl,nc);
break;
case 4:
desalocaMatriz(ppmatriz,nl,nc);
exit(0);
}

}
system("PAUSE");
return(0);
}


int **alocaMatriz(int **pp,int nl,int nc)
{
int **pptemp;
pptemp=pp;
pp=(int **)realloc(pp,nl*sizeof(int *));
if(pp==NULL)
{
printf(ERRO1);
free(pptemp);
system("PAUSE");
exit(1);
}
for(int i=0;i<nl;i++)
{
if(pptemp==NULL)
{
pp=NULL;
}
pp=(int *)realloc(pp,nc*sizeof(int));
if(pp==NULL)
{
printf(ERRO2);
system("PAUSE");
exit(1);
}
}
return(pp);
}

void desalocaMatriz(int **pp,int nl,int nc)
{
for(int i=0;i<nl;i++)
{
free(pp);
}
free(pp);
}
void preencheMatriz(int **pp,int nl,int nc)
{
for(int i=0;i<nl;i++)
{
for(int j=0;j<nc;j++)
{
printf("elemento[%d][%d]: ",i,j);
scanf("%d",&pp[j]);
}

}
}
int menu()
{
int op=0;
do
{
system("CLS");
printf("1-Definir ou redefinir a matriz");
printf("\n2-Preencher a matriz");
printf("\n3-Imprimir a matriz");
printf("\n4-Sair do programa.");
printf("\n\n\t\tOpcao:");
scanf("%d",&op);
} while(op<0 || op>4);
return (op);
}
void imprimeMatriz(int **pp,int nl,int nc)
{
for(int i=0;i<nl;i++)
{
printf("\n");
for(int j=0;j<nc;j++)
{
printf("\t%d",pp[j]);
}

}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi bem o que você quis dizer. Tipo, o usuário pode numa primeira alocação escolher o tamanho que ele quiser a dimensão, certo? O que ele não pode fazer é diminui ou aumentar depois de definida uma primeira vez?

 

Ou, o usuário não pode em uma primeira alocação extrapolar um limite pré definido das dimensões?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.