5 Maneras de evitar problemas de puntero en c ++

Video: Tutorial Programacion en C nº36 : Punteros Suma y Resta

En C ++, una 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.

    Video: Tutorial de C – 6. Punteros

    Nunca deje las variables de puntero no inicializado - las cosas no serían tan mal si punteros no inicializados siempre contenían 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 no inicializadas 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 a, inicializar a nullptr. nullptr se garantiza que sea una dirección ilegal.

  2. Cero fuera de los punteros después de usarlos.

    Del mismo modo, siempre cero una variable de puntero una vez que el puntero ya no es válida, asignándole el valor nullptr. Este es particularmente el caso cuando regresa un bloque de memoria para el almacenamiento dinámico utilizando delete- siempre cero el puntero después de regresar a la pila de memoria.

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

    Siempre trata de devolver un bloque de memoria a la pila al mismo nivel de abstracción a medida que se asignan. Esto generalmente significa tratar de eliminar la memoria al mismo nivel de las llamadas a funciones.

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

    No hay que olvidar que una excepción puede ocurrir en casi cualquier momento. Si tiene la intención de atrapar la excepción y mantener operativo (en lugar de dejar la caída del programa), asegúrese de que se captura la excepción y devolver los bloques de memoria a la pila antes de que los punteros que apuntan a ellos salen del alcance y la memoria es perdió.

  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) -void myFunc () {char c = `a`-char * pC = &c-fn ((int *) PC) -}

La función anterior se compila sin queja que el ordenador central 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 () está esperando un puntero a un completo entero de 32 bits y no algún bit Char rinky-dink 8. Estos tipos de problemas son muy difíciles de resolver.

Artículos Relacionados