[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