1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Erro de Segmentação em Struct + listas Encadeada dupla + ponteiros.

Olá, sou iniciante em C. Estou tentando manipular uma lista duplamente encadeada. Ela compila (eu acho), porém apresenta erros logo após a compilação. Os problemas que identifiquei foram:

  • O código compila,mas trava e fecha sozinho logo nas primeiras linhas.
  • O compilador não acusa erro;
  • Aprendi a executar o depurador e ele indiciou um erro de segmentação, relacionado à linha 59, ou seja, na função print() e na linha 75, de onde faço a chamada da função print()partindo do main().
  • Não sei o que fazer com os erros acusados pelo depurador. Sei que têm a ver com os meus ponteiros, mas eu acredito que declarei 'corretamente', ou então, não consigo imaginar a solução.

Agradeço o apoio de todos.

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

//-------------------------------------------------------------
struct Filme{
    int codigo;
    char titulo[100];
    int ano;
    int quantidade;
    char genero[10];
    struct Filme *prox;
    struct Filme *ant;
};
struct Filme *filmeInicio;

//------------------------------------------------------------

void Abrir(){            
            struct Filme* filme = (struct Filme*)malloc(sizeof(struct Filme));//realizar alocação dinamica para a lista.


            filme->codigo = 1111;
            strcpy(filme->titulo,"aaaaaa");
            filme->ano = 1234; 
            filme->quantidade = 12;
            strcpy(filme->genero,"acao");


            struct Filme *auxiliar = filmeInicio;//ponteiro que recebe os valores 
                if(filmeInicio == NULL){
                filmeInicio = filme;
                return;                
            }

            while(auxiliar->prox != NULL){
                auxiliar = auxiliar->prox;
            }

            auxiliar->prox = filme;//Encontra a ultima posição da lista e aloca.
            filme->ant = auxiliar;//O ponteiro esquerdo de filme aponta para a posição anterior.


}

void print(){
    //struct Filme *auxiliar;
    struct Filme *auxiliar = filmeInicio;//ponteiro que recebe os valores 
    if(auxiliar ==NULL){
        printf("lista vazia");
        return;                
    }

    while( auxiliar->prox != NULL){
        printf("Codigo: %i    ",auxiliar->codigo);
        printf("titulo: %s    ",auxiliar->titulo);
        printf("ano: %i    ",auxiliar->ano);
        printf("quantidade: %i    ",auxiliar->quantidade);
        printf("genero: %s    \n\n\n",auxiliar->genero);

        auxiliar = auxiliar->prox;
    }
}




main(){
    Abrir();
    print();

}
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ponteiros estrutura-de-dados ou faça a sua própria pergunta.