tag:blogger.com,1999:blog-6926985245178197542.post5329203175236066196..comments2024-03-23T15:34:28.415-07:00Comments on C Progressivo: A função free() - Liberar e evitar vazamento de memóriaUnknownnoreply@blogger.comBlogger7125tag:blogger.com,1999:blog-6926985245178197542.post-42770213478069368192018-05-21T15:39:04.803-07:002018-05-21T15:39:04.803-07:00Beowulf disse...
Pessoal, eu aloquei muito memória...Beowulf disse...<br />Pessoal, eu aloquei muito memória e não liberei usando o free. Se eu formatar o pc eu terei de volta o acesso aos blocos de memória que eu tranquei?<br /><br />Olá. Logo q você reiniciar seu PC a memória q foi alocada já vai estar liberadaAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-70558022034921823952016-12-13T09:21:42.878-08:002016-12-13T09:21:42.878-08:00Pessoal, eu aloquei muito memória e não liberei us...Pessoal, eu aloquei muito memória e não liberei usando o free. Se eu formatar o pc eu terei de volta o acesso aos blocos de memória que eu tranquei?Beowulfhttps://www.blogger.com/profile/12092167037921100939noreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-59600625307772991012016-04-02T16:40:26.036-07:002016-04-02T16:40:26.036-07:00O cara aí em cima está certo: "vocês estão re...O cara aí em cima está certo: "vocês estão retornado o endereço de memoria do ponteiro e não do endereço de memoria que deve se apagado do ponteiro."Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-43409606797559662962014-12-03T10:45:07.847-08:002014-12-03T10:45:07.847-08:00Galera
O conceito de uso do NULL esta certo, porém...Galera<br />O conceito de uso do NULL esta certo, porém, pra tirar a prova real se o conteúdo foi apagado vocês estão retornado o endereço de memoria do ponteiro e não do endereço de memoria que deve se apagado do ponteiro.<br /><br />O CORRETO SERIA:<br /><br /> char *senha;<br /> <br /> senha = (char *) malloc(21*sizeof(char));<br /> printf("Digite sua senha [ate 20 caracteres]: ");<br /> scanf("%[^\n]s", senha);<br /> <br /> printf("Senha: %s\n", senha);<br /> printf("Endereço antes da free(): %d\n", senha);<br /> <br /> free(senha);<br /> <br /> printf("Endereço depois da free(): %d\n", senha);<br /><br /> return 0;<br />----------------------------------------------------<br /><br /><br />E DEPOIS DE USAR O NULL:<br /><br /><br /> char *senha;<br /> <br /> senha = (char *) malloc(21*sizeof(char));<br /> printf("Digite sua senha [ate 20 caracteres]: ");<br /> scanf("%[^\n]s", senha);<br /> <br /> printf("Senha: %s\n", senha);<br /> printf("Endereço antes da free(): %d\n", senha);<br /> <br /> free(senha);<br /> senha = NULL;<br /><br /> <br /> printf("Endereço depois da free(): %d\n", senha);<br /><br /> return 0;<br /><br />por: m.menezes.costa2014@bol.com.brAnonymousnoreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-32409753579544615472014-10-19T07:14:48.122-07:002014-10-19T07:14:48.122-07:00Se voce imprimir a senha após a chamada do free(),...Se voce imprimir a senha após a chamada do free(), o conteúdo do ponteiro também estará limpo, então não entendi exatamente o porque de setar para NULL após o free(). De qualquer forma você não tem mais acesso ao conteúdo.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-15823160373286707742014-04-25T03:08:04.226-07:002014-04-25T03:08:04.226-07:00Não muda, pq ele colocou null o endereço em que se...Não muda, pq ele colocou null o endereço em que senha recebe. Mas no programa ele mostra o endereço de senha não o endereço que senha guarda. Se vc tirar & do printf que mostra senha, verá que limpou o endereço armazenado em senha, ou seja, quaisquer que sejam os dados apontado pelo ponteiro virou lixo.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-6926985245178197542.post-75545185180254657522014-01-17T14:29:16.758-08:002014-01-17T14:29:16.758-08:00Olá C Progressivo,
Copiei o código do programa qu...Olá C Progressivo,<br /><br />Copiei o código do programa que nos pede uma senha, adicionei apenas mais uma linha exatamente depois do comando "free(senha);".<br /><br />Logo abaixo de comando coloquei: "senha = NULL;"<br /><br />Quis saber se o ponteiro realmente para outro endereço de memória senão o alocado anteriormente.<br /><br />Para minha surpresa, após digitar a senha, o endereço do ponteiro senha continuo absolutamente o mesmo.<br /><br />Revisei o código e aparentemente não encontrei nada de errado, enfim, testei em outro código teste que fiz, o resultado não foi diferente.<br /><br />Gostaria de saber o que pode estar acarretando esse não apontamento para NULL.<br /><br />PS: Como alternativa, já tentei apontar o ponteiro para um inteiro 0 e o resultado foi o mesmo "senha = 0;".<br /><br />Anonymoushttps://www.blogger.com/profile/16358810491990595520noreply@blogger.com