Título: Duda con punteros Publicado por: neg1414 en 30 Mayo 2013, 09:35 am Es posible saber si un puntero a sido ya inicializado...
Gracias Título: Re: Duda con punteros Publicado por: amchacon en 30 Mayo 2013, 10:01 am Es posible saber si un puntero a sido ya inicializado... Por convenio, los punteros que no apuntan a nada se les suele poner valor NULL.Título: Re: Duda con punteros Publicado por: neg1414 en 30 Mayo 2013, 11:27 am Gracias por contestarme...
Trabajo con c++ Builder y en principio yo tambien creo que un puntero no inicializado apunta a NULL PERO.... En una Clase1 que he creado he definido una variable global que va a ser un vector de la forma Código: TClaseArray *Vector; Durante el proceso aveces lo inicializarlo de la forma Código: Vector = new TClaseArray[TotalArray] otras no llego a inicializarlo Al destruir la clase1 en el destructor (dado que aveces inicializo y otras no) he puesto la condicion : Código: if(Vector !=NULL ){delete [] Vector ; Vector = NULL;} Siempre se cumple la condicion aunque no se inicialize el vector y claro esta cuando NO inicializo el Vecotr da ERROR Si inicializo siempre el Vector nunca me da error... Que hago mal...Gracias Título: Re: Duda con punteros Publicado por: amchacon en 30 Mayo 2013, 12:05 pm Nada más declarar el puntero apunta a basura, tienes que darle un valor inicial:
Código: TClaseArray *Vector = NULL; Por cierto, el condicional se puede abreviar: Código
Título: Re: Duda con punteros Publicado por: neg1414 en 30 Mayo 2013, 13:18 pm ok,
Muchas Gracias Título: Re: Duda con punteros Publicado por: lucaslopez0000 en 4 Junio 2013, 21:26 pm Hola , veras te explico , como han dicho arriba , es una buena costumbre inicializar los punteros , y en general cualquier variable. Aun asi , es algo que tu no puedes saber , ya que si tu compilas este programa
Código
Cada vez que lo ejecutes obtendras un valor distinto para numero , ya que al no estar inicializado , cuando el programa pide al sistema que le de un chachito de memoria , esa memoria contiene datos 'basura' que se llaman , de otras ejecuciones que usaron esa memoria antes ... etc , etc , etc Puede que en windows obtengas varias veces el mismo numero , no pasa nada , pero por lo general obtendras numeros distintos en cada ejecucion. Y ahora vamos con los punteros. Si un puntero no esta inicializado , apuntara a una direccion de memoria (pseudo)aleatoria. Si por accidente modificas la zona de memoria apuntada , pueden ocurrir 2 cosas 1. Te salgas de tu zona de memoria y haya violacion del segmento 2. Sobreescribas instrucciones de tu programa y empieze a hacer cosas raras Espero que te haya servido mi respuesta |