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

(Resolvido) Dúvida com liberação de espaço alocado.


Ricardo Martins

Pergunta

Vamos supor que eu defina a seguinte estrutura:

struct AGENDA
{
  char *nome;
  char *email;
};
E depois, em alguma parte do código, eu crio dinamicamente um elemento dessa estrutura:
AGENDA *contato;
contato= (AGENDA *) malloc (sizeof (AGENDA));
E então eu aloco dinamicamente os espaços necessários pra armazenar as strings nos ponteiros nome e e-mail:
contato->nome=  (char *) malloc (50*sizeof (char));
contato->email= (char *) malloc (50*sizeof (char));
Vamos supor agora que eu já usei essa estrutura e não preciso mais dela. Sendo assim, eu quero desalocar a estrutura, mas quero desalocar ela INTEIRA. É aí que fica a minha dúvida. Eu desaloco só a estrutura...
free (contato);
... ou eu desaloco as strings primeiro pra, aí sim, desalocar a estrutura?
free (contato->nome);
free (contato->email);
free (contato);

Ou seja, se eu desalocar só a estrutura, as strings continuarão alocadas?

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Exatamente. Por isso, nesses casos, geralmente se usa funções de alocação.

AGENDA* alocar_agenda() {
  AGENDA* agenda;

  agenda = malloc(sizeof(AGENDA));
  if(agenda == NULL) {
    /* erro de alocação aqui. é importante sempre verificar pelo null */
    return NULL;
  }

  agenda->nome = malloc(50 * sizeof(char));
  if(agenda->nome == NULL) {
    /* erro de alocação aqui. é importante sempre verificar pelo null */
    free(agenda);
    return NULL;
  }

  agenda->email = malloc(50 * sizeof(char));
  if(agenda->email == NULL) {
    /* erro de alocação aqui. é importante sempre verificar pelo null */
    free(agenda->nome);
    free(agenda);
    return NULL;
  }

  return agenda;
}

void liberar_agenda(AGENDA* agenda) {
  free(agenda->nome);
  free(agenda->email);
  free(email);
}

Agora tudo que você tem que fazer é usar alocar_agenda e liberar_agenda para gerenciar o alocamento dinâmico de memória. Isto também é útil caso vocẽ queira mudar o esquema de alocamento depois, por exemplo.

Abraços!

Link para o comentário
Compartilhar em outros sites

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...