5 maneras de evitar problemas de puntero en C ++

En C ++, un puntero es una variable que contiene la dirección de un objeto en la memoria interna del equipo. Utilice estos pasos para evitar problemas con los punteros en C ++:

  1. Inicializar punteros cuando se declaran.

    Nunca deje las variables de puntero no inicializado - las cosas no sería tan malo si los punteros no inicializados siempre contienen valores aleatorios - la gran mayoría de valores aleatorios son valores de puntero ilegales y hará que el programa se bloquee tan pronto como se utilizan. El problema es que las variables sin inicializar tienden a asumir el valor de otras variables de puntero, utilizados anteriormente. Estos problemas son muy difíciles de depurar.

    Si usted no sabe qué más para inicializar un puntero, inicializar a nullptr. nullptr se garantiza que sea una dirección ilegal.

  2. Cero fuera punteros después de usarlos.

    Del mismo modo, siempre cero una variable puntero una vez que el puntero no válido asignándole el valor es nullptr. Este es particularmente el caso cuando regresa de un bloque de memoria para el montón usando delete- siempre cero el puntero después de regresar de memoria heap.

  3. Asignar memoria del montón y devolverlo a la pila al mismo "nivel" para evitar pérdidas de memoria.

    Siempre trate de devolver un bloque de memoria para el montón en el mismo nivel de abstracción a medida que se asignan. Esto generalmente significa intentar eliminar la memoria en el mismo nivel de llamadas a funciones.

  4. Coger una excepción para borrar la memoria cuando sea necesario.

    No olvide que puede producir una excepción en casi cualquier momento. Si tiene la intención de atrapar la excepción y mantener operativo (en oposición a dejar que la caída del programa), asegúrese de que usted coge la excepción y devolver los bloques de memoria a la pila antes de que los punteros que apuntan a ellos salen de alcance y la memoria es perdido.

  5. Asegúrese de que los tipos coinciden exactamente.

    Asegúrese siempre de que los tipos de punteros coinciden con el tipo requerido. No refundición un puntero sin alguna razón específica. Considera lo siguiente:

fn void (int * p) -anular myFunc () {char c = 'a'-char * pc = c-fn ((int *) PC) -}

La función anterior compila sin quejarse ya que el pC puntero del personaje se ha reformulado a un int * para que coincida con la declaración de fn (int *) - Sin embargo, este programa es casi seguro que no funciona. La función fn () espera un puntero a un entero de 32 bits y no una mala muerte de 8 bits carbón. Este tipo de problemas son muy difíciles de resolver.




» » » » 5 maneras de evitar problemas de puntero en C ++