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 ++:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

menu