[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