Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Raficcha

[Resolvido] Uso de memória

Recommended Posts

Olá, gostaria que analizassem essas duas funções e me tirassem duas dúvidas, elas fazem a memsa coisa, mas uma usa memória dinâmica (a primeira):

 

int CMemoria::addCategoria(unsigned int id, const char *nome, const char *cor, char nota)
{
Categoria_t *Gravar = new Categoria_t();
Gravar->id = id;
strSet(Gravar->nome, nome);
strSet(Gravar->cor, cor);
Gravar->nota = nota;

delete [] Gravar;
//demais comandos apra gravar arquivo
}

 

e

 

int CMemoria::addCategoria(unsigned int id, const char *nome, const char *cor, char nota)
{
Categoria_t Gravar;
Gravar.id = id;
strSet(Gravar.nome, nome);
strSet(Gravar.cor, cor);
Gravar.nota = nota;
//demais comandos apra gravar arquivo
}

 

Minha primeira dúvida:

Gostaria de saber qual são as vantagens de uso de cada uma (qual é mais rápida, qual é mais custosa, ...)

 

Minha segunda dúvida:

Na primeira função eu uso um "delete []" para liberar a memória utilizada, porem na segunda não sei como o fazer. Gostaria de saber se o espaço de memória utilizado na segunda função ficará indisponível (se ocorre vazamento de memória.)

Compartilhar este post


Link para o post
Compartilhar em outros sites

no segundo exemplo que você passou não precisa se preocupar em deletar a variável, pois assim que a função em que ela se encontra terminar ela será terminada também. Inclusive se você fizer isso aqui:

 

 

int main()
{
   {
       int variavelAutomatica = 0;
   }
   variavelAutomatica++;

   return 0;
}

 

Vai acusar erro, pois quando acaba o escopo onde variavelAutomatica foi declarada ela é terminada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No primeiro exemplo, ao deletar o ponteiro antes de gravar o que você precisa será inútil a criação do mesmo. O certo seria:

 

int CMemoria::addCategoria(unsigned int id, const char *nome, const char *cor, char nota)
{
       Categoria_t *Gravar = new Categoria_t();
       Gravar->id = id;
       strSet(Gravar->nome, nome);
       strSet(Gravar->cor, cor);
       Gravar->nota = nota;
       //demais comandos para gravar arquivo
       delete Gravar;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum, sobre a primeira função é verdade que iria me dar problemas, eu coloquei esses comentários enquanto escrevia o tópico e acabei não reparando.

 

tiagoKv, reparei que você utilizou "delete Gravar" ao invéz de "delete [] gravar", sabe me dizer qual é a diferença das duas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum, então:

delete-> para objetos únicos

delete[] -> para arrays

 

 

:D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Moederadores, acho que já podem marcar o tópico como [Resolvido]. Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.