Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Cristiano Franco

De onde vem o valor de uma variável não setada, em C?

Recommended Posts

Pessoal bom dia.

Tenho o seguinte código:

 

#include <stdio.h>


main(){
    int num;


    printf("%d", num);
    scanf("%d", &num);
}
Na tela aparece 2... de onde vem esse 2?
Estou acostumado com linguagens como PHP, C#, Java... quando mando imprimir uma variável náo inicializada ele me retorna um NULL na tela.
Percebi que o C pode usar vários compiladores diferentes, isso pode ser interferencia de algum compilador? (estou usando o padrão da instalação do CodeBlocks)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Variável é um nome que vc dá a um pedaço de memória alocado. O que estiver nesse pedaço de memória, vem.
C não tem esse mecanismo de inicialização p/ um valor padrão. É trabalho do programador fazer isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas como ele aloca um espaço q, conceitualmente era pra estar vazio, e dá um endereço pra ele dentro do prigrama, mesmo se nesse espaço estiver alguma coisa dentro?

 

Parece q ele olha um terreno sem muro,mas onde tem lixo, como nao tem muro, ele constroi, chama do nome q a gente quiser, mas traz o lixo q tava dentro do muro...

 

O intrigante é: como havia um lixo naquele terreno se nada antes se referenciava a ele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O intrigante é: como havia um lixo naquele terreno se nada antes se referenciava a ele?

Nada referenciava ele no seu programa, mas e antes? Outro programa poderia estar utilizando aquela memória e deixou esses dados lá.

 

O sistema operacional não faz distinção entre memória vazia ou cheia, ele distingue apenas se a memória está sendo usada ou não. Quando um programa diz que não precisa mais daquela memória o sistema apenas marca ela como livre porém não apaga os dados que estavam lá. Essa mesma memória posteriormente vai ser cedida para um novo programa, que vai receber ela com os dados anteriores do outro programa.

 

Imagine que você é dono de várias casas e então você decide alugar alguma delas, toda vez que um cliente deixar uma de suas casas e outra pessoa vier morar nela você vai demolir a casa e construir outra para o novo cliente ou você só re-aluga a mesma casa?

 

Obviamente linguagens de alto-nível tendem a definir um valor padrão para cada variável tirando uma parte dessa responsabilidade do programador na intenção de evitar possíveis erros, mas o mesmo não acontece em linguagens de baixo nível.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É importante ressaltar que na maior parte dos casos, acessar o valor de um objeto sem antes inicializa-lo causa comportamento indefinido.

 

 

Há casos em que há sim inicialização implícita (por exemplo, quando o objeto é declarado com storage duration static).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.