| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Mar 05 Sep, 2006 8:34 pm Asunto: Duda con new y delete!!! |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 05 Sep, 2006 10:36 pm Asunto: |
|
|
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 |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Mar 05 Sep, 2006 11:20 pm Asunto: |
|
|
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 |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Mar 05 Sep, 2006 11:56 pm Asunto: |
|
|
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 |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Mie 06 Sep, 2006 4:47 pm Asunto: |
|
|
| Cómo le digo a la aplicación que no cree las clases automaticamente? |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mie 06 Sep, 2006 5:22 pm Asunto: |
|
|
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 |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Mie 06 Sep, 2006 6:14 pm Asunto: |
|
|
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 |
|
 |
Jumanor Lt


Registrado: 28 Feb 2003Mensajes: 91Ubicación: tacna-Peru
|
Publicado: Jue 07 Sep, 2006 2:51 am Asunto: Punteros |
|
|
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 |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Jue 07 Sep, 2006 5:35 pm Asunto: |
|
|
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 |
|
 |
dobermannmx Master


Registrado: 30 Ago 2006Mensajes: 191Ubicación: Zapopan, Jal. - México
|
Publicado: Vie 08 Sep, 2006 5:37 pm Asunto: |
|
|
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 |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Vie 08 Sep, 2006 8:48 pm Asunto: |
|
|
| Ha quedado claro, Muchas Gracias a todos!!! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 08 Sep, 2006 9:38 pm Asunto: |
|
|
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 ? _________________
 |
|
| Volver arriba |
|
 |
dan Ens

Registrado: 17 May 2006Mensajes: 43
|
Publicado: Vie 08 Sep, 2006 10:16 pm Asunto: |
|
|
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 |
|
 |
|