Ir para conteúdo
Fórum Script Brasil
  • 0

liberando a memoria heap corretamente...


cgm2k21

Pergunta

Boa noite!

Bom preciso de uma dica/ajuda em uma problema...

tenho duas structs, LIST e NO.  lista duplamente encadeada.

//insiro/crio 100.000 nos.

struct no{
    char *nome;
    char sexo;
    float nota;
    float media;
    int id;    
    struct no *next, *prev;
};

struct list{
    long int size_list;
    struct no *begin, *end;
};

typedef struct no NO;
typedef struct list LIST;

for(int y = 0; y < 100000; y++)
            inserir_inicio(*list); 

void CreateNo(NO **no)
{
    *no = (NO*)calloc(1,sizeof(NO));

    if (*no) {
        (*no)->nome = "cicero";
        (*no)->sexo = 'M';
        (*no)->nota = 0.0;
        (*no)->media = 1;
        (*no)->id++;
        (*no)->next = NULL;
        (*no)->prev = NULL;

        is_Ok = true;
    }
    else {
        printf("ERRO: Ao alocar memoria em 'void CreateNo(NO **no)'\n");
        is_Ok = false;
        return;
    }
}

void inserir_inicio(LIST *list)
{
    NO *no;
    CreateNo(&no);

    if (is_Ok) {    
        no->next = list->begin;
        list->begin = no;
        list->size_list++;
    }
}

// destroy os nos
void DestoyList(LIST **list)
{
	if ((*list)->begin == NULL)
	{
		free(*list);
		printf("Lista vazia!\n\n");
	}
	else {
		NO *p = (*list)->begin, *tmp = NULL;
		
		while (p != NULL) {			
			tmp = p;
			p = p->next;

			/*tmp->nome = "0";
			tmp->sexo = '\0';
			tmp->id = 0;
			tmp->media = 0;*/

			free(tmp);
		}
		free(p);
		(*list = NULL);		
	}
}

o problema é o seguinte:

quando inicio o aplicativo ele começão com 512kb, quando criando  100.000  na memoria heap, aumenta para mais ou menos uns 7,8mb, bom ate aqui tudo oks

mas quando delete este nos com o free() esperava eu q retornasse para os mesmo 512kb inicias do aplicativo, mas isso não acontece, ele retorna para 1,3mb.

minha pergunta é: porque não deleta tudo, já setei zeros e para todos os membros da struct no mas mesmo assim não deleta tudo.

Se alguém poder meda da uma dica. OBS: não quero código  pronto eu quero apenas dicas se possível bem explicada porque sou meio novato em c kkk.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...