Como liberar memória em C Programming

Não é como um grande problema, uma vez que estava de volta na era do microcomputador, mas a memória desperdiçando ainda deve ser uma preocupação para qualquer programador C. Embora você pode prepare-se para 1.024 caracteres de entrada, as chances são boas de que os usuários do seu programa não podem ser todos Stephen King.

Nesse caso, você pode aparar suas solicitações de memória depois de fazê-los. A memória extra pode então ser devolvido ao sistema operacional em que é considerado cortesia comum.

Dando a volta a bytes POUCOS

#include #include #include int main () {char * input-int len-input = (char *) malloc (sizeof (char) * 1024) -se (entrada == null) {puts ( "Não foi possível alocar buffer! ! Oh não ") - exit (1) -} puts (" Tipo de algo longo e chato: ") - fgets (entrada, 1023, stdin) -len = strlen (entrada) -se (realloc (entrada, sizeof (char) * (lEN + 1)) == null) {puts ( "Não é possível realocar tampão!") - de saída (1) -} puts ( "Memory realocados.") - puts ( "Você escreveu:") - printf ( " "% s " n ", de entrada) -Retornar (0) -}

O código-fonte em dar para trás alguns bytes acomoda a função realloc () na Linha 19. Aqui é o formato:

p = Realloc (amortecedor,tamanho) -

amortecedor é uma área de armazenamento existente, criado pelo malloc () (ou similar) função. tamanho é o novo tamanho do buffer baseada em porém muitos unidades que você precisa de um tipo de variável específica. Em caso de sucesso, realloc () retorna um ponteiro para amortecedor- caso contrário, NULL é retornado. Tal como acontece com malloc (), a função realloc () requer o cabeçalho stdlib.h.

O cabeçalho string.h é chamado na Linha 3. Isso é para satisfazer o uso da função strlen () na Linha 18. O comprimento da cadeia de entrada é recolhida e guardada na len variável.

Na linha 19, a função realloc () é chamado. Ele redimensiona um buffer já criado para um novo valor. Na linha 19, que o tampão é o buffer de entrada, eo tamanho é o comprimento da corda mais 1 para ter em conta o carácter 0. Afinal de contas, é tudo o texto que foi entrada e todo o armazenamento que é necessário.

Se a função realloc () for bem sucedida, redimensiona o buffer. Se não, um NULL é retornado, que é testado para a linha 19 e, se verdadeiras mensagens de erro, apropriadas são exibidas.

Exercício 1: Digite o código-fonte do Giving Back alguns bytes em seu editor. Construir e executar.

Embora você não tem qualquer confirmação secundário, pode-se supor que o bem-sucedido chamar para a função realloc () que, de fato, reduzir o tamanho do buffer de entrada para exatamente o que era necessário. Qualquer armazenamento restante é mais uma vez disponível para o programa.

A última função é necessária, a fim de fazer malloc () e realloc () para um trio. Essa é a função free (), demonstrado em se você ama a sua memória, defini-lo livre.

Se você ama seu MEMORY, libertá-lo

#include #include int main () {int * idade em idade = (int *) malloc (sizeof (int) * 1) -se (idade == null) {puts ( "falta de memória ou algo assim!") - saída (1) -} printf ( "Quantos anos você tem em anos?") -scanf ( "% d", da idade) - * idade * = 365 printf ( "você está sobre% d dias de idade n", * idade) -livre (idade) -Retornar (0) -}

A função free () libera a memória alocada, tornando-o disponível para malloc () ou qualquer outra coisa para usar.

exercício 2: Digite o código-fonte do Se você ama sua memória, defini-lo livre para um novo projeto. Construir e executar.

Não é necessário o uso de free () em seu código a menos que seja necessário ou recomendado. A maioria dos programadores não use free (), graças à grande quantidade de memória lotaram a maioria dos dispositivos eletrônicos de hoje. Memória utilizada pelo seu programa é liberada automaticamente pelo sistema operacional quando o programa sai. Quando a memória é pequena, no entanto, liberalmente usar tanto realloc () e free () para evitar erros de falta de memória.

menu