Es posible saber si un puntero a sido ya inicializado...
Gracias
Cita de: neg1414 en 30 Mayo 2013, 09:35 AMEs posible saber si un puntero a sido ya inicializado...
Por convenio, los punteros que no apuntan a nada se les suele poner valor NULL.
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
TClaseArray *Vector;
Durante el proceso aveces lo inicializarlo de la forma
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 :
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
Nada más declarar el puntero apunta a basura, tienes que darle un valor inicial:
TClaseArray *Vector = NULL;
Por cierto, el condicional se puede abreviar:
if (Vector) // Si vector tiene un valor válido
{
delete [] Vector;
Vector = NULL;
}
ok,
Muchas Gracias
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
#include <stdio.h>
int main(int argc , char *argv[])
{
int numero; // Lo dejo sin inicializar
printf("La variable numero es %d\n" , numero);
return 0;
}
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