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

Armando B. VERA rdlmat en gmail.com
Mie Feb 24 11:22:46 CET 2016


Si no me falla la memoria creo que hay dos formas de usar el *delete*. Con
corchetes cuando se trata de un array y sin corchete cuando la variable es
simple. De modo tal que usarías *delete [] a.mem* con un bucle y  *delete
a.mem* sin el. Me parece que por ahí puede estar el problema. Saludos


El 23 de febrero de 2016, 18:45, marcelinux <marcelinator en gmail.com>
escribió:

> 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.
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160224/5b58ee12/attachment.html>


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