How to use free in a structure variable (chained list)?

1

I can not use free() in " struct Lista *proximo ". Here is my code:

#include "stdafx.h"
#include <stdlib.h>
#include <conio.h>
#include <locale.h>

struct Lista {
    int num;
    struct Lista *proximo;
}celula;

int main()
{
setlocale(LC_ALL, "Portuguese");
//Criar uma função para a inserção de dados na lista

struct Lista *inicio;
struct Lista *proximo_item;
short int resp = 1;
short int cont = 1;

inicio = (struct Lista *)malloc(sizeof(struct Lista));
if (inicio == NULL) {
    exit(1);
}

proximo_item = inicio;
do {
    printf("Inf. um numero para a lista: ");
    scanf_s("%d", &proximo_item->num);
    printf("Deseja continuar? 1 = Sim | != Nao\n");
    scanf_s("%hi", &resp);
    system("cls");
    if (resp == 1) {
        proximo_item->proximo = (struct Lista *)malloc(sizeof(struct Lista));
        proximo_item = proximo_item->proximo;
    }
} while (resp == 1);

proximo_item->proximo = NULL;
proximo_item = inicio;
while (proximo_item != NULL){ 
    printf("%dº item da lista: %d\n", cont, proximo_item->num);
    proximo_item = proximo_item->proximo;
    cont++;
}
free(proximo);
free(inicio);
free(proximo_item);
_getch();
return 0;
}
    
asked by anonymous 23.01.2018 / 17:46

1 answer

1

Change this:

free(proximo);
free(inicio);
free(proximo_item);

So:

while (inicio != NULL) {
    struct Lista *deletando = inicio;
    inicio = inicio->proximo;
    free(deletando);
}
    
23.01.2018 / 18:12