[C con Clase] Comprobar validez de un puntero, miembro de una estructura

Salvador Pozo salvapozo en gmail.com
Mie Feb 24 17:34:17 CET 2016


Hola:

He vuelto a compilar el ejemplo que mencionas, para verificar que no contiene errores (a veces uso ejemplos que no funcionan bien), y no me da el error que mencionas.

En el ejemplo, tal como aparece en la página, 'a' si tiene asignado un valor válido, en main se asigna un array dinámico a 'a'.

Se me ocurren dos cosas que pueden llevar a error:

1) En la función, los nombres de los parámetros están intercambiados. En la llamada usamos asignar(b,a), y en la función el primer parámetro se llama 'a' y el segundo 'b'. De modo que lo que en main es 'a', en la función es 'b' y viceversa.
Esto en si mismo no debería ser un problema, salvo para seguir el funcionamiento del programa. :)

2) Dentro de la función, 'a' (lo que en main es 'b'), no tiene asignada memoria.

Como consecuencia, dependiendo del compilador, b.mem (en main), puede ser 0 (nulo), o puede tener un valor aleatorio (basura).
En el compilador que uso yo (MinGW), los punteros siempre se inicializan a cero, pero puede que en el que tu usas no no sea así.

Para verificar esto añade la siguiente línea en main, después de la declaración de los objetos 'a' y 'b'.

    b.mem = 0;

O asigna un valor válido:

    b.mem = new int[4];

En general, es una muy mala costumbre no inicializar los punteros, ni siquiera en ejemplos sencillos como este. Lo corregiré en la página.

Hasta pronto.


Más información sobre la lista de distribución Cconclase