Olá, bom eu fiz um código sobre lista simplesmente encadeada para um trabalho da facu, mas infelizmente estou tendo problemas com o erro: segmentation fault, que como já pesquisei refere-se quando tento acessar um local da memória não permitido, o problema é que acho estranho pois tem vezes que o código funciona e outras dá esse erro, eis o código:
typedef struct L
{
int valor;
struct L *prox;
}LISTA;
LISTA *concatena(LISTA **L1, LISTA **L2)
{
LISTA *lista3 = NULL; // Declara lista 3
LISTA *aux1 = *L1;
LISTA *aux2 = *L2;
LISTA *ant = NULL;
int pos = 0;
if(aux1 == NULL)
{
printf("Lista 1 esta vazia!");
printf("Imprimindo Lista 2: ");
imprime(L2);
}
else if(aux2 == NULL)
{
printf("Lista 2 esta vazia!");
printf("Imprimindo Lista 1: ");
imprime(L1);
}
do
{
if(aux2 == NULL)
{
insere_meio(pos, aux1->valor, &lista3);
aux1 = aux1->prox;
}
else if(aux1 == NULL && aux2 != NULL)
{
insere_meio(pos, aux2->valor, &lista3);
aux2 = aux2->prox;
}
else if(aux1->valor == aux2->valor)
{
if(ant == NULL) // Executa somente uma vez
{
insere_meio(pos, aux1->valor, &lista3);
aux1 = aux1->prox;
aux2 = aux2->prox;
ant = lista3;
}
else if(aux1->valor == ant->valor && aux2->valor == ant->valor)
{
aux1 = aux1->prox;
aux2 = aux2->prox;
}
else
{
insere_meio(pos, aux1->valor, &lista3);
aux1 = aux1->prox;
aux2 = aux2->prox;
ant = ant->prox;
}
}
else if(aux1->valor > aux2->valor)
{
if(aux2->valor == ant->valor)
{
insere_meio(pos, aux1->valor, &lista3);
aux1 = aux1->prox;
aux2 = aux2->prox;
}
else
{
insere_meio(pos, aux2->valor, &lista3);
aux2 = aux2->prox;
}
}
else
{
if(aux1->valor == ant->valor)
{
insere_meio(pos, aux2->valor, &lista3);
aux1 = aux1->prox;
aux2 = aux2->prox;
}
else
{
insere_meio(pos, aux1->valor, &lista3);
aux1 = aux1->prox;
}
}
pos++;
}while(aux1 != NULL || aux2 != NULL);
return(lista3);
}
main()
{
LISTA *lista1 = NULL;
LISTA *lista2 = NULL;
LISTA *lista3;
int n1, n2, n3, n4, m1, m2, m3, m4;
printf("Valor LISTA 01 N1: ");
scanf("%d", &n1);
printf("Valor LISTA 01 N2: ");
scanf("%d", &n2);
printf("Valor LISTA 01 N3: ");
scanf("%d", &n3);
printf("Valor LISTA 01 N4: ");
scanf("%d", &n4);
printf("\nValor LISTA 02 N1: ");
scanf("%d", &m1);
printf("Valor LISTA 02 N2: ");
scanf("%d", &m2);
printf("Valor LISTA 02 N3: ");
scanf("%d", &m3);
printf("Valor LISTA 02 N4: ");
scanf("%d", &m4);
insere_ordenada(n1, &lista1);
insere_ordenada(n2, &lista1);
insere_ordenada(n3, &lista1);
insere_ordenada(n4, &lista1);
printf("\nLista 1: ");
imprime(&lista1);
printf("\nLista 2: ");
insere_ordenada(m1, &lista2);
insere_ordenada(m2, &lista2);
insere_ordenada(m3, &lista2);
insere_ordenada(m4, &lista2);
imprime(&lista2);
lista3 = concatena(&lista1, &lista2); // ATENÇÃO!
printf("\nLista 3: ");
imprime(&lista3);
getch();
}
eis o código, não coloquei as outras funções pois elas estão funcionando normalmente, como podem ver na lista que tem o coment "ATENÇÃO!", se eu comentar essa linha a lista 2 é imprimida e dá o erro de segmentação em seguida, mas se eu deixar do jeito q está, o erro de segmentação já acontece depois de imprimir a lista 1, como resolver isso? li em alguns tópicos aqui mesmo[erros parecidos com o meu] pra rodar o programa com debugador, como faz isso? Se alguém souber como resolver isso ajude, pq tá tenso isso .-.
Uso Code::Blocks e Ubuntu 12.04 ^^'