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

marcelinux marcelinator en gmail.com
Mar Feb 23 22:45:51 CET 2016


Hola, de nuevo.
Estoy repasando el segundo ejemplo de http://c.conclase.net/curso/index.php?cap=022#inicio
donde se usa una función para sustituir el operador de asignación.
Lo que no me acaba de funcionar es:
if(a.mem) delete[] a.mem;

En ejecución me produce un error "Segmentation fault."
Lo he separado en dos líneas:
if(a.mem)
   delete[] a.mem;
Lo sigo por Debug y el error se produce en "delete[] a.mem;"
Que, para mí, tiene lógica, puesto que no se ha "creado".
Lo que no entiendo es ¿por qué "if(a.mem)" evalúa verdadero.
De hecho, el valor que me devuelve gdb print a.mem es
(int *) 0x1
Y si los desreferencio
print *a.mem
Cannot access memory at address 0x1

No sé qué es lo que tengo mal.

Estoy usando GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
con la aplicación compilada con g++ (Debian 4.9.2-10) 4.9.2
sobre un sistema Debian 8 jessie amd64.


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