Pergunta

Caro g hackers ++, eu tenho a seguinte pergunta.

Quando alguns dados de um objeto é substituído por um programa com defeito, por que o programa eventualmente falhar na destruição desse objeto com um erro de livre dobro? Como ele sabe se os dados forem corrompidos ou não? E por que isso causa double livre?

Foi útil?

Solução

Não é geralmente que a memória do objeto é substituído, mas alguma parte do lado de fora de memória do objeto. Se as estruturas de controle deste sucessos de malloc, livre vai surtar quando ele acessa-los e tenta fazer coisas estranhas com base na estrutura corrompida.

Se você realmente só memória objeto de substituição com coisas tolas, não há nenhuma maneira malloc / free saberia. Seu programa pode falhar, mas por outras razões.

Dê uma olhada valgrind . É uma ferramenta que emula a CPU e assiste a cada acesso à memória de anomalias (como tentar estruturas de controle de malloc substituir). É realmente fácil de usar, na maioria das vezes você acabou de começar seu programa dentro valgrind, antecedendo valgrind na casca, e você economiza um monte de dor.

Em relação C ++: sempre se certificar de que você usa novo em conjunto com exclusão e, respectivamente, new [] em conjunto com delete []. Nunca misturá-las. coisas ruins vão acontecer, muitas vezes semelhantes ao que você está descrevendo (mas valgrind iria avisá-lo).

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