Does not enter the function and gives segmentation fault

0

Hello, please consider the structure and functions given below and the types defined. In the main function, when it enters the odd even function of the segmentation fault error. I'm not understanding why. Could someone help me, please?

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

    typedef struct cel {
        int info;
        struct cel * prox;
    } celula;

    typedef celula * apontador;

    /*dado um apontador (lista) imprime o camp info recursivamente*/
    void imprimeRec(apontador inicio) {
        if (inicio != NULL) {
            printf("%d\n", inicio->info);
            imprimeRec(inicio->prox);
        }
    }

   /*dada uma lisata ligada, insere um no no final*/
apontador insereNoFimRec(apontador inicio, int x) {
    apontador novo;

    if (inicio == NULL) {
        novo = malloc(sizeof(celula));
        novo->info = x;
        novo->prox = NULL;
        return novo;
    }
    inicio->prox = insereNoFimRec(inicio->prox, x);

    return inicio;
}


    /*recebe um int n e retorna um apaontador para uma lista ligada*/
    apontador criaLista(int n) {
        int i = 0;
        int info;
        apontador lista = NULL;


        while (i < n) {
            printf("L[%d] = ", i);
            if (!scanf("%d", &info))
                return NULL;
            lista = insereNoFimRec(lista, info);
            i++;
        }

        return lista;
    }


    void parImpar(apontador *par, apontador *impar, apontador inicio) {
        apontador t1, t2;

        t1 = t2 = NULL;

        if ((inicio->info % 2) == 0)
            *par = t1 = inicio;
        else
            *impar = t2 = inicio;

        inicio = inicio->prox;

        while (inicio != NULL) {
            if ((inicio->info % 2) == 0) {
                t1->prox = inicio;
                t1 = t1->prox;
            }
            else {
                t2->prox = inicio;
                t2 = t2->prox;
            }
            inicio = inicio->prox;
        }
        t1 = t2 = NULL;
    }

    int main() {
        int tamanho;
        apontador lista, *par, *impar;

        par = impar = NULL;
        printf("Tamanho da lista: ");
        if (!scanf("%d", &tamanho))
            return 0;

        lista = criaLista(tamanho);
        imprimeRec(lista);

        printf("Agora, vamos separar a ultima lista em numeros pares e impares\n");

        parImpar(par, impar, lista);

        printf("Par:\n");
        imprimeRec(*par);
        printf("Impar:\n");
        imprimeRec(*impar);

        return 0;
    }
    
asked by anonymous 07.11.2018 / 23:58

1 answer

0

Declare even and odd as

apontador par, impar;

Pass the address for the parmmpar function:

parImpar(&par, &impar, lista);

In the parem () function call insereNoFimRec () to insert in the even or odd list depending on the value of the item.

    
08.11.2018 / 00:22