Problema com Listas Encadeadas [RESOLVIDO]

1. Problema com Listas Encadeadas [RESOLVIDO]

Danillo Souza
danltmz

(usa Ubuntu)

Enviado em 23/05/2010 - 13:31h

Eu criei apenas duas funções: uma pra inserir e outra pra imprimir a lista, mas a única coisa que aparece quando mando exibir a lista é um "0", dai achei que o problema fosse na função de imprimir, mas fazendo manualmene com printf() edu "Falha de segmentação.", o que me levou a ter certeza que o problema é na função de inserir.. mas não consigo achar o erro :s

Código: http://codepad.org/COLTKDfU

Alguém pode dar uma ajuda?


  


2. MELHOR RESPOSTA

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 23/05/2010 - 14:41h

Uma pequena correção no cometário anterior.
Você deve inicializar também a primeira célula, no caso o próxima a está que é NULL:
first->next = NULL;
Então na função insert(), você aloca memória para *ins e inicializa ins->next com o próximo de cell e só depois é que cell->next apontará para ins, assim:
ins = (Cell *) calloc(1, sizeof(Cell));
ins->content = nContent;
ins->next = cell->next;
cell->next = ins;

void insert ( int nContent, Cell* cell ) {
Cell *tmp, *ins;

ins = (Cell *) calloc(1, sizeof(Cell));

for (tmp = cell ; tmp != NULL ; tmp = tmp->next);

tmp = ins;
}

Basicamente o erro está na não incialização do *ins, voc aloca memória para *ins e esquece de inicializar, então o ins->next aponta para qualquer lugar na memória e quando no for você faz tmp = ins no próximo loop do for tmp apontará para uma área de memória em que não foi definida por você, causando falha de segmentação ou até perda de configuração do sistema (já aconteceu comigo).

Veja uma modificação que fiz: (corrigido)
void insert ( int nContent, Cell* cell ) {
Cell *tmp, *ins;

ins = (Cell *) calloc(1, sizeof(Cell));

ins->content = nContent;
ins->next = NULL;
cell->next = ins;

for (tmp = cell ; tmp != NULL ; tmp = tmp->next);
tmp = ins;
}

E lembrando antes de encerrar o programa "desaloque" toda a memória alocada, crie uma função, é um bom hábito fazer isso :) além de mais profissional.
Valeu!

3. Re: Problema com Listas Encadeadas [RESOLVIDO]

Ricardo Cardoso
ricardo cardoso

(usa Debian)

Enviado em 23/05/2010 - 14:01h

Void não retorna nada...


4. Re: Problema com Listas Encadeadas [RESOLVIDO]

Danillo Souza
danltmz

(usa Ubuntu)

Enviado em 23/05/2010 - 14:08h

Eu sei que void não retorna, por isso coloquei, a função não retorna nada mesmo, a função aloca espaço dinâmicamente na lista e adiciona o valor pelo ponteiro.


5. Re: Problema com Listas Encadeadas [RESOLVIDO]

Danillo Souza
danltmz

(usa Ubuntu)

Enviado em 23/05/2010 - 14:31h

Putz, verdade cara, eskeci de um monte d coisa D:
vou re-fazer aqui.. vlww


6. Re: Problema com Listas Encadeadas [RESOLVIDO]

Danillo Souza
danltmz

(usa Ubuntu)

Enviado em 23/05/2010 - 14:36h

Agora consegui, funcionou certinho, vlw SamL.
A função nova ficou:

void insert ( int nContent, Cell* cell ) {
Cell *ins;

ins = (Cell *) calloc(1, sizeof(Cell));
ins->content = nContent;
ins->next = NULL;

for (; cell->next != NULL ; cell = cell->next);

cell->next = ins;
}

nem foi necessário o *tmp xD






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts