Errores comunes en el uso de punteros

  1. Es frecuente confundir el uso de "*" para definir punteros y el uso de "*" para acceder a los datos a los que apunta. Cuando se usa el "*" en una declaración o definición de variables, indica que la variable que se define o declara a continuación es un puntero. Cuando se emplea "*" antes de un puntero en una expresión de una instrucción a ejecutar, indica que no se quiere acceder al puntero sino a la variable a la que apunta el puntero.
  2. Uso de un puntero que no ha sido correctamente inicializado. Muchos programadores cuando se inician en el uso de C creen erróneamente que por el mero hecho de definir un puntero éste ya apunta a una variable sobre la que se puede actuar. Aspectos a tener en cuenta para evitar esto:
    1. Los datos que maneja el programa son los que ha creado el programador en memoria dinámica o en la pila, el lenguaje nunca va a crear datos en memoria por sí mismo.
    2. Tener siempre presente la zona de la memoria en la que está cada dato que se maneja mediante el puntero.
  3. El acceso fuera de rango dentro de un vector es otro error común. Este error no se produce tanto como consecuencia del anterior sino debido a que con frecuencia se descuida el hecho de que los vectores en C van desde 0 a n-1, siendo n el número de datos en el vector. Para intentar evitar este error se debe tener sumo cuidado en los límites de los bucles que usan vectores.
  4. Otro error típico viene del funcionamiento del procedimiento free, que libera el bloque de memoria apuntado por un puntero pasado por parámetro. free no puede modificar el parámetro pasado, y no lo hace, por lo que después de usar free el puntero mantiene el valor anterior, ahora inválido para su uso pero que, descuidadamente, se puede emplear con posterioridad.