Variaveis são automatiicamentes iniciadas com 0 ? [RESOLVIDO]

1. Variaveis são automatiicamentes iniciadas com 0 ? [RESOLVIDO]

Lucas Rafael Barbosa Lopes
lucas7844

(usa Ubuntu)

Enviado em 09/08/2016 - 10:27h


#include <stdio.h>
#include <stdlib.h>

int main()

{
int *p = (int *) malloc(sizeof(int));

*p = 1000;

free(p);

printf("%i\n", *p);


return 0;
}


criei um ponteiro e coloquei o valor 1000, depois devovi a memoria ao sistema operacional por que sera que ele colocou um 0
criei outras variaveis e sempre com o valor zero, deveria ter um lixo?


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 09/08/2016 - 12:58h

O que o Uilianries disse está correto, mas não se aplica ao caso em questão, porque não se está falando nem de variáveis automáticas nem de variáveis estáticas, mas sim de dados na memória livre.

Eu já vi arquiteturas em que o comportamento esperado pelo autor do tópico -- alocar memória, colocar um conteúdo ali, liberá-la e, por meio de um ponteiro que ainda apontava para a área liberada, fazer acesso ao conteúdo oficialmente liberado e ainda encontrá-lo ali -- realmente acontecia.

O problema é que não existe nenhuma garantia de o que vai acontecer quando se acede a um endereço de memória depois que aquela região de memória é devolvida. A coisa pode funcionar -- incidentalmente, é bom deixar claro -- mas também pode provocar efeitos totalmente adversos, como corromper dados ou fazer o programa abortar.

A única garantia que se tem é que tentar acesso a um endereço que não pertence -- ou, como neste caso, que não pertence mais -- ao programa é um erro de programação.

Dito isso, podemos especular uma possível explicação para o comportamento observado, diferente do comportamento esperado. Uma implementação de free() preocupada com segurança poderia muito bem forçar a gravação de conteúdo zerado na memória que está sendo liberada, para garantir que o conteúdo anterior não seja passível de exame por outros programas que possam, posteriormente, vir a alocar a mesma região de memória. Uma implementação que tome esse cuidado pode ser menos eficiente do que outra que simplesmente devolva a memória ao SO, já que gasta tempo limpando o conteúdo anterior, mas é uma implementação completamente válida e conforme o padrão que rege a biblioteca padrão do C.

3. Re: Variaveis são automatiicamentes iniciadas com 0 ? [RESOLVIDO]

Uilian Ries
uilianries

(usa Linux Mint)

Enviado em 09/08/2016 - 11:09h

Explicação curta:
O padrão das linguagens C e C++ definem variáveis auto, de escopo local, com valor indeterminado, caso não inicializadas. Apenas variáveis do tipo global e static são inicializadas em 0.





--
Uilian Ries
Linux Counter: 521986


4. Re: Variaveis são automatiicamentes iniciadas com 0 ? [RESOLVIDO]

Lucas Rafael Barbosa Lopes
lucas7844

(usa Ubuntu)

Enviado em 11/08/2016 - 23:50h

Muito obrigado a todos






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts