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

Jorge Garcia jorgeantonio49 en gmail.com
Mie Feb 24 17:22:50 CET 2016


Sin ver un snip mas completo de tu código lo único que se me ocurre es 
lo siguiente:
Estas seguro de que inicializas el apuntador al declararlo?
Por que si no lo haces el estándar no dice que deba ser null (En algunos 
compiladores puede ser null en otros tener basura).
Como el único valor en en apuntadores que es falso es null eso seria el 
por que la condición de tu if se evaluá a verdadera, aun cuando no le 
has asignado memoria.

Creo que tienes algo como eso:
//a.mem es declarado y contiene una dirección basura
char*  a.mem;

//a.mem es verdadero (no es nullptr)
if (a.mem) {
     delete[] a.mem;   //Se genera un segmentation fault.
}

//a.mem tiene una direccion valida de memoria mas tarde en el programa
a.mem = new char[100];

Y creo que lo correcto es:

//a.mem es declarado e inizializado a null
char*  a.mem = nullptr;   //Verifica que tengas esta linea

//a.mem es falso (vale nullptr)
if (a.mem) {
     delete[] a.mem;   //No se ejecuta
}

//a.mem tiene una dirección valida de memoria mas tarde en el programa
a.mem = new char[100];

//Esta vez a.mem es verdadero (cualquier dirección que no sea null)
if (a.mem) {
     delete[] a.mem;   //Libera memoria
}

-Jorge
On 2/24/2016 10:10 AM, marcelinux wrote:
> El pasado 2016-02-24 10:15:01, Armando B. VERA escribió:
>   
> ABV> Si no me falla la memoria creo que hay dos formas de usar el *delete*. Con
> ABV> corchetes cuando se trata de un array y sin corchete cuando la variable es
> ABV> simple. De modo tal que usarías *delete [] a.mem* con un bucle y  *delete
> ABV> a.mem* sin el. Me parece que por ahí puede estar el problema. Saludos
>
> Gracias por tu interés.
> En efecto. Precisamente se crea a.mem = new int[10] fuera de la función.
> Yo creo que el problema es que a.mem (dentro de la función) no debería tener una dirección.
> O, tal vez, tenga que crear b, antes de invocar a la función.
> ¿Alguien ha probado el ejemplo tal como está?
> _______________________________________________
> 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





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