Dúvida sobre comando free [RESOLVIDO]

1. Dúvida sobre comando free [RESOLVIDO]

Mr.Perfection
perfection

(usa Slackware)

Enviado em 18/03/2020 - 04:00h

Eu olhei por ai alguns códigos usando o free e entendo em alguns pontos que ele é necessário MAS...
Minha dúvida é saber se realmente preciso declarar ele em situações como no exemplo abaixo!

Tudo o que faço nesse programa é pegar um texto, imprimir e saio do programa!

Então penso: Acabou o programa, ele não existe mais na memória do PC. Certo?
Então porque precisaria usar o free se tudo foi encerrado com o término do programa?

#include <stdio.h>
//#include <stdlib.h>
int main(void) {
char *Texto;
scanf("%m[^\n]", &Texto);
printf("%s\n", Texto);

//free(Texto);
}



  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/03/2020 - 11:12h

perfection escreveu:

Eu olhei por ai alguns códigos usando o free e entendo em alguns pontos que ele é necessário MAS...
Minha dúvida é saber se realmente preciso declarar ele em situações como no exemplo abaixo!

Tudo o que faço nesse programa é pegar um texto, imprimir e saio do programa!

Então penso: Acabou o programa, ele não existe mais na memória do PC. Certo?
Então porque precisaria usar o free se tudo foi encerrado com o término do programa?


Se você souber que seu sistema vai efetivamente liberar todos os recursos, você pode omitir desalocações de memória, fechamentos de arquivos liberações de canais de rede etc.

Entretanto, do ponto de vista da linguagem C, o que o seu sistema operacional vai fazer depois que o seu programa acabar é desconhecido, indeterminado. É possível, portanto, que exista uma máquina ou sistema em que, após um programa acabar, não haja liberação automática de recursos.

Quando você escreve um programa em C usando apenas os recursos que o padrão estabelece, é de se esperar que o programa vai produzir os mesmos resultados em qualquer máquina capaz de rodar programas em C, seja ela o seu PC, o celular do seu filho, o meu antigo Apple II ou o professor que demonstra manualmente o funcionamento do programa em C para os alunos usando apenas um quadro-negro, giz e apagador. Desse modo, você, como programador, tem de fazer a sua parte para alcançar o objetivo esperado de produzir os mesmos resultados, e essa parte consiste em seguir as convenções que o padrão também apresenta, e uma dessas convenções é liberar a memória que tenha sido manualmente alocada.


... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)

3. Re: Dúvida sobre comando free [RESOLVIDO]

Mr.Perfection
perfection

(usa Slackware)

Enviado em 18/03/2020 - 11:24h

paulo1205 escreveu:
Se você souber que seu sistema vai efetivamente liberar todos os recursos, você pode omitir desalocações de memória, fechamentos de arquivos liberações de canais de rede etc.

Entretanto, do ponto de vista da linguagem C, o que o seu sistema operacional vai fazer depois que o seu programa acabar é desconhecido, indeterminado. É possível, portanto, que exista uma máquina ou sistema em que, após um programa acabar, não haja liberação automática de recursos.

Quando você escreve um programa em C usando apenas os recursos que o padrão estabelece, é de se esperar que o programa vai produzir os mesmos resultados em qualquer máquina capaz de rodar programas em C, seja ela o seu PC, o celular do seu filho, o meu antigo Apple II ou o professor que demonstra manualmente o funcionamento do programa em C para os alunos usando apenas um quadro-negro, giz e apagador. Desse modo, você, como programador, tem de fazer a sua parte para alcançar o objetivo esperado de produzir os mesmos resultados, e essa parte consiste em seguir as convenções que o padrão também apresenta, e uma dessas convenções é liberar a memória que tenha sido manualmente alocada.

UAU, Rápido e Preciso! Nem sei porque não consegui ver por essa forma! Realmente concordo que temos que ter responsabilidade em nosso programa, e não esperar que o Sistema Operacional acerte ou Funcione, porque nem sempre vai acontecer!
Muitíssimo Obrigado







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts