Pergunta

Eu tenho um objeto que eu estou liberando com delete, e tem um char* que está sendo liberado com livre em seu destruidor. A razão que eu estou usando livre é porque eu usei strdup e malloc na criação dos ponteiros char. A razão que eu estou usando malloc é porque eu usei strdup para começar na maioria dos caminhos de código. Será que essa corrupção cenário causa memória?

Foi útil?

Solução

Não, se você combinar as chamadas adequadamente ou seja free() para memória alocada com malloc() e delete para memória alocada com new, ele vai funcionar bem.

Outras dicas

O que você está fazendo é correto. Uma classe que tem sido newed deve ser desalocada com delete, mas se ele é dono de memória que foi alocada com malloc (direta ou indiretamente), então ele deve liberar essa memória com free.

A sua implementação está correta. Você usar free () para liberar a memória alocada com malloc () (ou strdup ()) e este é exatamente o que fazer.

A exigência é que você liberar memória com uma correspondência primitiva o utilizado para alocar essa memória. E esta exigência é cumprida em sua implementação.

Eu descobri que estava errado. Eu estava passando meu objeto como uma cópia através de um método, e manteve a char* em todo; quando a função saiu, esse objeto temporário é excluído, liberando o char*. Agora eu preciso do char* após o método saiu, mas isso acabou agora. Dois * de e menos um fixo-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top