Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Duda con new y delete!!!

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Duda con new y delete!!! Responder citando

Hola a todos!!!

Tengo una duda con el new y el delete, tengo el siguiente codigo:

Funcion *aaaa=new Funcion();
aaaa->nombre="prueba1111";
delete aaaa;
aaaa->nombre="prueba";

no presenta error, cómo es posible que después de haber hecho un delete puedo acceder a las propiedades del objeto, o acaso estoy utilizando mal el delete?

Ayuda por favor!!!
Gracias...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pregunta...

¿Te refieres a que no te marca error en tiempo de ejecución o de diseño?

Si la respuesta es en tiempo de diseño, no deberia marcarte error, precisamente por eso...porque estas diseñando.

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

NO, en tiempo de ejecución!!!
Es como si delete no hiciera nada, además estoy haciendo debug e inspect sobre el objeto y aún tiene el mismo bloque de memoria asignado...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si es un form o un datamodule puede estarse creando al abrir la aplicacion, y tu creas uno nuevo y lo borras pero el primero sigue existiendo. Intenta borrarlo dos veces y si lo consigues mira las opciones del proyecto a ver si esta en autocreate o en available.
Revisa que no lo estes creando en FormCreate.

Si no es asi es algo bien extraño......
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Cómo le digo a la aplicación que no cree las clases automaticamente?
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si puderias publicar parte de la definicón de tu clase probablemente más de uno te puede dar una respuesta.

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Yo he colocado el codigo en un nuevo Unit así:
File->New->Unit

//---------------------------------------------------------------------------
#ifndef Unit3H
#define Unit3H

#include <libpq-fe.h>

class Funcion
{
public:

String nombre,oid,propietario,n_args,args,tipo_devuelto,lenguaje,fuente,
volatilidad,acl,comentario;
bool conjunto,seguridad,estricto,sistema;

Funcion();
~Funcion();
bool crea_funcion();
bool borra_funcion(String n_func);

String lista_funciones(PGconn *conn,String esquema,String catalogo);
String construye_funcion(PGconn *conn,String nodo,String esquema,String catalogo);

//edita_funcion
//obtiene_propiedades_funcion
};
//---------------------------------------------------------------------------
#endif
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Punteros Responder citando

holas

xq deberia marcar error????

declaras un puntero y este puntero esta apuntando a cualquier lugar de memoria y es precisamente por eso que no genera error.

Ahora si tienes suerte apuntara a un sector de memoria no utilizado pero caso contrario te generaria muchos problemas


Código:
Funcion *aaaa;//creo un peuntero q apunta aleatoriamente a cualquier  lugar de memoria

aaaa->nombre="prueba"; //tonces no hay error

Espero q sto te de una ayuda algo

Aunque segun el standard cuando se hace delete el puntero apunta a la direccion 0 tonces tamos igual que lo de arriba.

Suerte
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Hola!!!

Entonces, según eso yo puedo utilizar mi clase sin necesidad de utilizar new y para borrar puedo asignar el puntero a NULL?

...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Haber Dan, tu problema es que no has entendido el funcionamiento de un puntero, como alguien dijo antes, cuando das un NEW estás apartando un espacio de memoria del tamaño que mide tu clase u objeto, y cuando aplicas el DELETE simplemente lo liberas mas liberar no es sinónimo de que que ya no apuntes a la misma localidad de memoria pero con el gran RIESGO de que el S.O. asigne a esa misma localidad otros DATOS, y si lo accesas obtendrás un hermoso GENERAL PROTECTION FAULT. Si has podido seguir accediendo a alguna propiedad es porque ese espacio de memoria aun no ha sido APARTADO para otro proceso.

Lo correcto para segurarte de que tu APUNTADOR liberado sea nulo, es inmediatamente después de aplicar el DELETE, asigna NULL a tu puntero y listo.

Espero haya sido clara mi explicación.

Saludos
_________________
ISC
Dobermannmx
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Ha quedado claro, Muchas Gracias a todos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

el problema esta resuelto, perfecto la pregunta viene por que despues de destruir el objeto intentas volver a usarlo?

Código:
Funcion *aaaa=new Funcion();   // creacion
aaaa->nombre="prueba1111"; // uso
delete aaaa;                           // destruccion

aaaa->nombre="prueba";   // Vuelves a usarlo?


en relativa, si haces esto para que el compilador te marque un error, puede que no lo haga, en todo caso... te vendrian bien unas clases de C

me imagino que usas un archivo de cabecera y puedo asegurar que tienes declarada la clase dentro de tu mismo cpp
o usas un archivo de cabecera ?
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Simplemente queria probar si efectivamente el objeto era eliminado de la memoria o no!!!

En cuanto a la clase, tengo un archivo de cabecera .h y la implementación la hago en un .cpp
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.