5 As formas de evitar problemas de ponteiro em c ++
Video: Programar em C - Lista Concatenada - Aula 68
Conteúdo
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.
Video: C++ - Aula 36 - Ponteiros - Parte 1
Nunca deixe variáveis de ponteiro não inicializado - as coisas não seria muito ruim 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 já não é válida, atribuindo-lhe o valor é nullptr. Este é particularmente o caso quando retornar um bloco de memória para a pilha usando Delete sempre zero o ponteiro depois de voltar de memória heap.
Alocar memória do heap e devolvê-lo para a pilha no 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ê alocou. 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 (como oposição a deixar o crash programa), 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 exatamente.
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:
fn vazio (int * p) -void myFunc () {char c = `A`-char * pc = &c-fn ((int *) pC) -}
A função acima compila sem queixa 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 trabalhar. A função fn () está esperando um ponteiro para um número inteiro de 32-bit e não um pouco de char rinky-dink 8. Esses tipos de problemas são muito difíceis de resolver.