1 – 7 de 7
Blogger Unknown disse...

Olá C Progressivo,

Copiei o código do programa que nos pede uma senha, adicionei apenas mais uma linha exatamente depois do comando "free(senha);".

Logo abaixo de comando coloquei: "senha = NULL;"

Quis saber se o ponteiro realmente para outro endereço de memória senão o alocado anteriormente.

Para minha surpresa, após digitar a senha, o endereço do ponteiro senha continuo absolutamente o mesmo.

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.

Gostaria de saber o que pode estar acarretando esse não apontamento para NULL.

PS: Como alternativa, já tentei apontar o ponteiro para um inteiro 0 e o resultado foi o mesmo "senha = 0;".

17 de janeiro de 2014 às 14:29

Anônimo Anônimo disse...

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.

25 de abril de 2014 às 03:08

Anônimo Anônimo disse...

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.

19 de outubro de 2014 às 07:14

Anônimo Anônimo disse...

Galera
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.

O CORRETO SERIA:

char *senha;

senha = (char *) malloc(21*sizeof(char));
printf("Digite sua senha [ate 20 caracteres]: ");
scanf("%[^\n]s", senha);

printf("Senha: %s\n", senha);
printf("Endereço antes da free(): %d\n", senha);

free(senha);

printf("Endereço depois da free(): %d\n", senha);

return 0;
----------------------------------------------------


E DEPOIS DE USAR O NULL:


char *senha;

senha = (char *) malloc(21*sizeof(char));
printf("Digite sua senha [ate 20 caracteres]: ");
scanf("%[^\n]s", senha);

printf("Senha: %s\n", senha);
printf("Endereço antes da free(): %d\n", senha);

free(senha);
senha = NULL;


printf("Endereço depois da free(): %d\n", senha);

return 0;

por: m.menezes.costa2014@bol.com.br

3 de dezembro de 2014 às 10:45

Anônimo Anônimo disse...

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."

2 de abril de 2016 às 16:40

Blogger Beowulf disse...

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?

13 de dezembro de 2016 às 09:21

Anônimo Anônimo disse...

Beowulf disse...
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?

Olá. Logo q você reiniciar seu PC a memória q foi alocada já vai estar liberada

21 de maio de 2018 às 15:39

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.
Você pode usar algumas tags HTML, como <b>, <i>, <a>

A moderação de comentários foi ativada. Todos os comentários devem ser aprovados pelo autor do blog.

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô