Skip to content
Latchkey

O que é um Null Pointer? A referência para o nada

Um null pointer é uma referência que deliberadamente aponta para o nada, usada para significar "nenhum valor aqui". Usá-la como se apontasse para um objeto real causa um erro ou crash.

Ponteiros e referências guardam o endereço de algum objeto. Um null pointer é o valor especial de "aponta para nada", uma forma de representar ausência. O problema começa quando o código assume que um ponteiro é válido e tenta usar o que ele aponta. Essa dereferência de null pointer é um dos bugs mais comuns em software, famosamente apelidado de "o erro de um bilhão de dólares".

O que null representa

Null (também nil, None ou nullptr dependendo da linguagem) é um sentinela que significa "nenhum objeto". É perfeitamente válido armazená-lo, passá-lo adiante e verificá-lo. O perigo está apenas em dereferenciá-lo, pedindo o objeto para o qual ele não aponta.

O que uma dereferência de null faz

Dereferenciar null se comporta de forma diferente por linguagem: um NullPointerException em Java, um TypeError em JavaScript, um segmentation fault em C. Em todos os casos, sinaliza que o código esperava um valor e recebeu nada.

Como as linguagens protegem contra null

  • Tipos Optional ou Maybe que forçam você a tratar o caso vazio.
  • Nullability no sistema de tipos, separando referências nullable de non-null.
  • Operadores null-safe como optional chaining que fazem short-circuit em null.
  • Verificações defensivas antes de dereferenciar uma referência que pode ser null.

Por que null causa tantos bugs

Em muitas linguagens qualquer referência pode secretamente ser null, então o compilador não pode avisá-lo. O erro só aparece em runtime, quando um caminho específico realmente atinge o valor null, o que pode ser fundo em produção ou em um ramo de teste raramente executado.

Um exemplo rápido

Em JavaScript, const user = null; user.name; lança porque você está lendo uma propriedade a partir do nada. Optional chaining (user?.name) retorna undefined em vez de lançar.

Null pointers no CI

Crashes de dereferência de null em testes são bugs de lógica determinísticos, então falham de forma idêntica em toda execução e dar retry não vai corrigi-los. A Latchkey dá retry apenas em falhas transitórias de infraestrutura, deixando crashes repetíveis de null pointer visíveis para que o bug subjacente seja corrigido.

Principais conclusões

  • Um null pointer representa a ausência de um valor; o bug é dereferenciá-lo.
  • Dereferências de null lançam exceptions em linguagens gerenciadas e segfaults nas não gerenciadas.
  • São bugs de lógica determinísticos, então dar retry no CI não ajuda.

Guias relacionados