manups19
(usa Outra)
Enviado em 07/11/2015 - 19:02h
Boa noite, preciso de ajuda para acha o motivo do segmentation fault em meu programa.
Sintetizando a ideia: devo ler um arquivo contendo um labirinto(.txt) e com um robo fictício contar o numero de premios coletados e buracos vistos. O caminho percorrido por ele deve ser empilhado e desempilhado(e empilhado novamente) quando ele precisar passar por um mesmo ponto. O robo deve percorrer o labirinto todo.
O erro se encontra na chamada da funcao ProcuraCaminho.
Me ajudem a resolver isso por favor.
OBS.: nao estranhem se estiver meio estranho, nao esta terminado.
OBS.2: so foi apresentado a parte do codigo com problemas.
#include <stdio.h>
#include <stdlib.h>
#include "TElemento.h"
#include "TLabirinto.h"
int main()
{
TLabirinto *labirinto,*labirintoaux;
TElemento inicio;
labirinto=LLeArq();
//struct TCampo *caminho;
if ( Origem(labirinto,&inicio) == 1 )
printf(" A origem 0 na posicao (%d,%d).\n\n",inicio.x,inicio.y);
labirintoaux=Alocar_matrizaux(labirinto,labirinto->linha,labirinto->coluna);
ProcuraCaminho(labirintoaux,labirinto,inicio); //<----------segmentation fault
______________________________________________________________
void ProcuraCaminho(TLabirinto *MLabaux,TLabirinto *MLab,TElemento inicio)
{
int unitaria,p,b;
TPilha Caminho;
TElemento dado,dapilha;
PVazia(&Caminho);
if(EhVazia(&Caminho) == 1)
Empilha(&Caminho,&inicio);
p=0;
b=0;
for(unitaria = 0; unitaria != 1; )
{
Desempilha(&Caminho,&dapilha);
dado.x = dapilha.x ; dado.y = dapilha.y+1;
if((MLab->matriz[dado.x][dado.y]!= 'x' || MLab->matriz[dado.x][dado.y] != 'b') && (MLabaux->matrizaux[dado.x][dado.y] != 1))
{
direita(MLabaux,MLab,&dado,&p,&b,&Caminho);
}
dado.x = dapilha.x ; dado.y = dapilha.y-1;
if((MLab->matriz[dado.x][dado.y]!='x' || MLab->matriz[dado.x][dado.y] != 'b') && (MLabaux->matrizaux[dado.x][dado.y] != 1))
{
esquerda(MLabaux,MLab,&dado,&p,&b,&Caminho);
}
dado.x = dapilha.x+1 ; dado.y = dapilha.y;
if((MLab->matriz[dado.x][dado.y]!= 'x' || MLab->matriz[dado.x][dado.y] != 'b') && (MLabaux->matrizaux[dado.x][dado.y] != 1))
{
baixo(MLabaux,MLab,&dado,&p,&b,&Caminho);
}
dado.x = dapilha.x-1 ; dado.y = dapilha.y+1;
if((MLab->matriz[dado.x][dado.y]!= 'x' || MLab->matriz[dado.x][dado.y] != 'b') && (MLabaux->matrizaux[dado.x][dado.y] != 1))
{
cima(MLabaux,MLab,&dado,&p,&b,&Caminho);
}
unitaria = MatrizauxUnitaria(MLabaux,MLab);
//printf("%d",unitaria);
}
printf("\nPremios=%d\nBuracos=%d",p,b);
}