Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: neg1414 en 30 Mayo 2013, 09:35 am



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
  1. if (Vector) // Si vector tiene un valor válido
  2. {
  3.  delete []  Vector;
  4.  Vector  = NULL;
  5. }


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
  1. #include <stdio.h>
  2.  
  3. int main(int argc , char *argv[])
  4. {
  5.         int numero; // Lo dejo sin inicializar
  6.         printf("La variable numero es %d\n" , numero);
  7.         return 0;
  8. }
  9.  

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