Bug n.º1 - Ponteiro não inicializado
Um dos meios mais fáceis de criar um bug de ponteiro é tentar fazer referência ao valor de um ponteiro, mesmo que ele não seja inicializado e ainda não aponte para um endereço válido. Por exemplo:
int *p; *p = 12;
O ponteiro p não é inicializado e aponta para um local aleatório na memória ao ser declarado. Ele poderia apontar para a pilha do sistema, variáveis globais, espaço de código do programa ou o sistema operacional. Quando você diz *p=12;, o programa simplesmente tentará escrever um 12 em qualquer local aleatório para onde p apontar. O programa pode explodir imediatamente ou daqui a meia hora, ou ainda pode corromper sutilmente os dados em qualquer outra parte do seu programa sem que você nunca perceba. Isso pode dificultar bastante o rastreamento de um erro. Certifique-se de inicializar todos os ponteiros para um endereço válido antes de referenciá-los.
Bug n.º 2 - Referências de ponteiro inválidas
Uma referência inválida ocorre quando o valor de um ponteiro é referido, mesmo que o ponteiro não aponte para um bloco válido.
Uma forma de criar este erro é dizer p=q;, quando q não é inicializado. O ponteiro p se tornará não inicializado e qualquer referência a *p será uma referência de ponteiro inválida.
O único modo para evitar este bug é desenhar imagens de cada etapa do programa e se certificar de que todos os ponteiros apontam para algum lugar. Referências de ponteiro inválidas fazem com que o programa trave inexplicavelmente pelos mesmos motivos citados no bug nº 1.
Bug nº 3 - Referências de ponteiro
Uma referência nula ocorre sempre que um ponteiro indicando zero é utilizado em uma instrução que tenta fazer referência a um bloco. Por exemplo, se p é um ponteiro de um inteiro, o seguinte código está inválido:
p = 0; *p = 12;
Como não há um bloco apontado por p, tentar ler ou escrever a partir de qualquer coisa ou para aquele bloco é uma referência de ponteiro nula e inválida. Existem motivos bons e válidos para apontar um ponteiro para zero, como veremos nos artigos posteriores. Entretanto, não fazer referência a um ponteiro desta maneira é inválido.
Todos estes bugs são fatais para um programa. Você deve prestar atenção à sua codificação para que estes bugs não ocorram. A melhor forma para tal é desenhar imagens de cada etapa de execução do código.