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!