Errores comunes en el uso de punteros
- 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.
- 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:
- 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.
- Tener siempre presente la zona de la memoria en la que está cada dato que
se maneja mediante el puntero.
- 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.
- 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.