Como libertar memória com a função malloc () em C Programming

Aqui está um segredo: Declarando uma variável em programação C é, na realidade, orientando o programa para pedir algum espaço de armazenamento do sistema operacional. Como você sabe (espero, você sabe), o sistema operacional é o senhor Elevado Mestre do computador ou qualquer dispositivo eletrônico que você está programando. Como tal, ele distribui RAM para programas que o solicitem.

Quando você declarar uma variável, a partir de um short int humilde a um buffer de cadeia enorme, você está dirigindo o programa para pedir que muito espaço, no qual você pretende colocar algo útil. Na linguagem C, também é possível alocar memória em tempo real, enquanto você tem um exército de ponteiros na mão para salvar os endereços.

Fundamentos do malloc () função

A função malloc () existe para saciar os desejos de memória do seu programa. Dê-lhe um ponteiro, e malloc () aloca memória (entendeu?) Em um determinado tamanho para armazenar um determinado tipo de variável. Aqui é o formato:

p = (digitar *) Malloc (tamanho) -

digitar é um typecast, dirigindo malloc () para alocar um bloco de memória de tamanho para armazenar a quantidade adequada de informações para o tipo de variável.

tamanho é a quantidade de armazenamento que é necessário. É medido em bytes, mas você deve ter cuidado para alocar armazenamento suficiente para acomodar o tipo de variável. Por exemplo, se você precisa de espaço para armazenar um valor int, você precisa criar espaço de armazenamento suficiente para que um valor int se encaixa. Esse número de bytes é tradicionalmente calculada usando o operador sizeof.

A função malloc () retorna o endereço do bloco de memória que está alocado. O endereço é armazenado no ponteiro p, que deve corresponder ao tipo de variável. Quando a memória não pode ser alocado, um valor NULL é retornado.

Você deve verificar a NULL antes de usar a memória alocada! Se não o fizer, o programa irá reunir-se com certo perigo.

Finalmente, você precisa incluir o arquivo de cabeçalho stdlib.h em seu código-fonte para manter o compilador satisfeito com a função malloc (). Dê-me espaço mostra um exemplo.

Dê-me espaço

#include #include int main () {int * idade em idade = (int *) malloc (sizeof (int) * 1) -se (idade == null) {puts ( "Não foi possível alocar memória") - exit (1 ) -} printf ( "Quantos anos você tem?") -scanf ( "% d", da idade) -printf ( "você é% d anos. n", * idade) -Retornar (0) -}

A primeira coisa a notar sobre Dê-me espaço é que a única variável declarada é um ponteiro, idade. Uma variável int não está definido, mesmo que o programa aceita entrada int e exibe int saída.

Linha 8 usa malloc () para anular o armazenamento para um número inteiro. Para garantir que a quantidade adequada de armazenamento é alocado, o operador sizeof é usado. Para atribuir espaço para um número inteiro, o valor 1 é multiplicado pelo resultado da operação sizeof (int). (Esse processo é desnecessária neste momento, mas ela entra em jogo mais tarde.) O endereço do que o armazenamento é salvo no ponteiro idade.

Linha 9 testes para garantir que malloc () foi capaz de alocar memória. Se não, o valor devolvido é nula (que é uma constante definida em stdlib.h), e o programa exibe uma mensagem de erro (referem-se a linha 11) e sai (consultar linha 12).

Você vai notar que a função scanf () na Linha 15 não usa o prefixo. Isso porque o idade variável é um endereço de memória - é um ponteiro! Você não precisa do nesse caso (assim como você não precisa do para uma cadeia lido pela função scanf ()).

Finalmente, a notação Peeker é usado na linha 16 para exibir a entrada de valor.

Exercício 1: Fogo até um novo projeto usando o código fonte a partir Dê-me espaço. Construir e executar.

Exercício 2: Usando Dê-me espaço como sua inspiração, escrever um programa que pede a temperatura atual fora como um valor de ponto flutuante. Tem o código perguntar se a entrada é Celsius ou Fahrenheit. Use malloc () para criar armazenamento para a entrada de valor. Mostrar a temperatura resultando em Kelvin. Aqui estão as fórmulas:

kelvin = celsius + 273,15 kelvin-= (Fahrenheit + 459,67) * (5,0 / 9,0) -

Exercise 3: Escreva um programa que aloca espaço para três valores int - um array. Você precisa usar a função de apenas um malloc () para realizar essa tarefa. Atribuir 100, 200, e 300 a cada int, e em seguida, exibir todos os três valores.

Como criar armazenamento de cadeia

A função malloc () é comumente usado para criar um buffer de entrada. Esta técnica evita declarar e dimensionamento uma matriz vazia. Por exemplo, a notação

input char [64] -

pode ser substituída por esta declaração:

char * input-

O tamanho do buffer é estabelecido dentro do código usando a função malloc () .Em Alocar um buffer de entrada, a função malloc () na linha 8 declara uma matriz de char - um buffer de armazenamento - por cerca de 1.024 bytes. Ok, é um kilobyte (KB).

Atribuição de um buffer de entrada

#include #include int main () {char * input-input = (char *) malloc (sizeof (char) * 1024) -se (entrada == null) {puts ( "Não foi possível alocar buffer! Oh não!") -exit (1) -} puts ( "Escreva algo longo e chato:") - fgets (entrada, 1023, stdin) -puts ( "Você escreveu:") - printf ( ""% s " n", entrada) -Retornar (0) -}

O resto do código aceita a entrada e, em seguida, exibe a saída. A função fgets () na Linha 15 limites de entrada para 1.023 bytes, deixando espaço de sobra para o 0 no final da cadeia.

Exercício 4: Chicote de um novo projeto usando o código-fonte de atribuir um depósito de entrada.

Exercício 5: Modificar o código fonte a partir Atribuir Buffer entrada. Crie um segundo char buffer usando um ponteiro e malloc (). Depois de texto é lido pelos fgets () função, copie o texto do primeiro tampão (entrada na atribuição de um Input Buffer) para o segundo tampão - todo o texto, exceto para o caractere de nova linha, n, no final da entrada.

Exercício 6: Modificar o código fonte de Exercício 5 de modo que o segundo tampão contém uma versão do texto no primeiro tampão, onde todas as vogais foram substituídos com pelo-sinais (@).

menu