O que significa "duplo grátis"?
Como o título sugere, sou novo em C e tenho um intercalar em breve. Atualmente, estou revisando artigos anteriores e um tema recorrente é o dobro do problema. Eu entendo que é o processo de chamarfree()
no mesmo local de memória duas vezes, mas tenho algumas perguntas que não tenho 100% de certeza sobre como responder:
Pergunta 1: Qual é o resultado de um duplo livre em C e por que é esse problema?
Isso causará um duplo livre:
char* ptr = malloc(sizeof(char));
*ptr = 'a';
free(ptr);
free(ptr);
Minha resposta a isso seria: ele retornaria um endereço de memória 0x0 e causaria uma instabilidade / falha no sistema. Além disso, se bem me lembro, um duplo grátis pode realmente chamarmalloc
duas vezes, o que resulta em um estouro de buffer, deixando o sistema vulnerável.
Qual seria a melhor maneira de resumir brevemente essa pergunta?
Pergunta 2: Descreva uma situação em que é particularmente fácil introduzir um duplo livre em C?
Eu estava pensando que, ao passar os ponteiros ao seu redor, acidentalmente liberá-lo em uma função e liberá-lo novamente sem perceber?
Novamente, qual é a "melhor" maneira de resumir isso?