5 As formas de evitar problemas de ponteiro em c ++

Video: Programar em C - Lista Concatenada - Aula 68

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.

    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.

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

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

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

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


Publicações relacionadas