5 maneiras de evitar problemas de ponteiro em C ++
Em C ++, uma apontador é uma variável que contém o endereço de um objeto na memória interna do computador. Use estas etapas para evitar problemas com ponteiros em C ++:
Inicializar ponteiros quando declarados.
Nunca deixe variáveis de ponteiro não inicializado - as coisas não seria muito mau se os ponteiros não inicializados sempre continha valores aleatórios - a grande maioria dos valores aleatórios são valores ponteiro ilegais e fará com que o programa deixe de funcionar assim que eles são usados. O problema é que as variáveis não inicializadas tendem a assumir o valor de outras variáveis de ponteiro, usados anteriormente. Estes problemas são muito difíceis de depurar.
Se você não sabe o que mais para inicializar um ponteiro para, inicialize-o para nullptr. nullptr é garantido para ser um endereço ilegal.
Zerar os ponteiros depois de usá-los.
Da mesma forma, sempre zero uma variável ponteiro uma vez que o ponteiro não será mais válida, atribuindo a ela o valor é nullptr. Este é particularmente o caso quando retornar um bloco de memória para a pilha usando Delete sempre zero o ponteiro após o retorno de memória heap.
Alocar memória do heap e devolvê-lo para a pilha ao mesmo "nível" para evitar vazamentos de memória.
Sempre tentar retornar um bloco de memória para a pilha no mesmo nível de abstração que você alocado-lo. Isso geralmente significa tentar apagar a memória ao mesmo nível de chamadas de função.
Capturar uma exceção para apagar da memória quando necessário.
Não se esqueça que uma exceção pode ocorrer em quase todo o tempo. Se você pretende capturar a exceção e continuar operacional (em oposição a deixar o programa falhar), certifique-se de que você capturar a exceção e retornar quaisquer blocos de memória para a pilha antes dos ponteiros que apontam para os ir fora do escopo e da memória é perdido.
Certifique-se de que os tipos de corresponder exactamente.
Sempre certifique-se de que os tipos de ponteiros corresponder ao tipo necessário. Não reformular um ponteiro sem alguma razão específica. Considere o seguinte:
vazio fn (int * p) - vazio myFunc () {char c = 'A'-char * pc = c-fn ((int *) PC) -}
A função acima compila sem reclamar desde o pC ponteiro de caracteres foi reformulado para um int * para coincidir com a declaração de fn (int *) - no entanto, este programa irá quase certamente não funcionar. A função fn () está esperando um ponteiro para um inteiro de 32 bits completo e não um pouco de char rinky-dink 8. Esses tipos de problemas são muito difíceis de resolver.