The problem is in the function exclusao
.You are deleting the record but not decreasing the list size since the function print
is using the variable lista->tamanho
as a loop stop parameter for
, output ends up being memory junk. Just put at the end of the function exclusao
lista->tamanho--
that solves this problem.
By the way it looks like you’re using a cyclical list if you put NULL
on the pointers can give segmentation failure.
With the corrections:
void exclusao(Lista* lista, int codigo)
{
int achei = 0;
Item* aux;
Item* item = lista->primeiro;
aux = item;
while (aux && !achei)
{
if (aux->codigo == codigo)
{
if (aux == lista->primeiro)
{
if (aux == lista->ultimo)
lista->primeiro = lista->ultimo; //CASO 1
else
{
lista->primeiro = lista->primeiro->proximo; //CASO 2
lista->primeiro->anterior = lista->ultimo;
}
}
else if (aux == lista->ultimo)
{ //CASO 3
lista->ultimo = lista->ultimo->anterior;
lista->ultimo->proximo = lista->primeiro;
}
else
{//CASO 4
aux->anterior->proximo = aux->proximo;
aux->proximo->anterior = aux->anterior;
}
achei = 1;
free(aux);
}
else aux = aux->proximo;
}
if (!achei)
printf("\nCodigo inexistente!\n");
else
printf("\nExclusao realizada!\n");
lista->tamanho--;
}
It worked. Thank you very much!
– Gustavo Luciano