Caloni, February 25, 2008
_Bom, parece que o "mother-fucker" wordpress ferrou com meu artigo sobre o Houaiss. Enquanto eu choro as pitangas aqui vai um outro artigo um pouco mais simples, mas igualmente interessante._
_"Wanderley, tenho umas sugestões para teu blog. A primeira: Que tal analisar o código abaixo e dizer se compila ou não. Se não compilar, explicar porquê não compila. Se compilar, o que acontecerá e por quê."_
*(int *)0 = 0;return 0;
Duas ressalvas aqui: a primeira quanto ao retorno da função é void, porém a função retorna um inteiro. Na linguagem C, isso funciona, no máximo um _warning_ do compilador. Em C++, isso é erro brabo de tipagem.
A linha obscura
A linha que guardamos para analisar contém uma operação de casting, atribuição e deferência, sendo o _casting _executado primeiro, operador unário que é, seguido pelo segundo operador unário, a deferência. Como sempre, a atribuição é uma das últimas. Descomprimida a expressão dessa linha, ficamos com algo parecido com as duas linhas abaixo:
Não tem nada de errado em atribuir o valor 0 a um ponteiro, que é equivalente ao define NULL da biblioteca C (e C++). De acordo com a referência GNU, é recomendado o uso do define, mas nada impede utilizar o 0 "hardcoded".
_Alguns amigos me avisaram sobre algo muito pertinente: dizer que acessar um ponteiro nulo, portanto **inválido**, é **errado** e **nunca deve ser feito**. Como um ponteiro nulo aponta para um **endereço de memória inválido**, acessá-lo irá **gerar uma exceção no seu sistema operacional** e **fazer seu programa capotar**. Um ponteiro nulo é uma maneira padrão e confiável de marcar o ponteiro como **inválido**, e testar isso facilmente através de um if. Mais uma vez: ponteiros nulos apontando para um endereço de memória **inválido** (o endereço 0) **nunca devem ser acessados**, apenas atribuído a ponteiros._ Em código. Isso pode: > > int* p = 0; // atribuindo nulo a um ponteiro > int* p2 = p; // isso também pode > Isso **não pode**: > > *p = 15; // NUNCA acessar ponteiros nulos > int x = *p; // isso também não pode, ler de um ponteiro nulo > Dito isso, me sinto melhor =)
Códigos de entrevista - o ponteiro nulo ● ● Categoria: code. Publicado em 2008-02-25. Texto escrito por Caloni. Quer comentar?