Raficcha 1 Denunciar post Postado Maio 2, 2011 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
Myho 2 Denunciar post Postado Maio 2, 2011 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
tiagokv 0 Denunciar post Postado Maio 2, 2011 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
Raficcha 1 Denunciar post Postado Maio 2, 2011 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
tiagokv 0 Denunciar post Postado Maio 2, 2011 A diferença é que uma é usada para arrays e outra para um unico objeto. Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Maio 2, 2011 Hum, então: delete-> para objetos únicos delete[] -> para arrays :D Compartilhar este post Link para o post Compartilhar em outros sites
Raficcha 1 Denunciar post Postado Maio 3, 2011 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