Duda con punteros

Iniciado por neg1414, 30 Mayo 2013, 09:35 AM

0 Miembros y 1 Visitante están viendo este tema.

neg1414

 Es posible saber si un puntero a sido ya inicializado...


Gracias

amchacon

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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

neg1414

 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


amchacon

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:

Código (cpp) [Seleccionar]
if (Vector) // Si vector tiene un valor válido
{
  delete []  Vector;
  Vector  = NULL;
}
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

neg1414


lucaslopez0000

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
La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX