elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
14 Febrero 2012, 07:55  

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Clases y memoria dinamica ¬¬
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Clases y memoria dinamica ¬¬  (Leído 1,849 veces)
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Clases y memoria dinamica ¬¬
« en: 21 Marzo 2010, 02:05 »

Ando estudiando clases y pes me han pusto ejercicios sobre listas   :¬¬, y pes me puse a hacer uno para agregar elementos a la lista... y pes creo(avisen si ta mal) que lo hice bien, pero al momento de eliminar la memoria reservada, algo me dice que meti la pata  :xD, aca esta el code para quien me pueda ayudar, diciendome cuales tantas cosas estan mal y como debo arreglarlo:
Código
#include <iostream>
 
using namespace std;
 
class lista{
   int num;
   lista *sgt;
   public:
       lista():num(0),sgt(NULL){};
       void x(lista*,int);
       void elim(lista*);
       void mostrar(lista*);
   };
 
void lista::x(lista *ptr, int n){
   if (!ptr){
       ptr=new lista;
       ptr->num=n;
       ptr->sgt=NULL;
   }
   else x(ptr->sgt,n);
}
void lista::elim(lista *ptr){
   if (!ptr->sgt) delete ptr;
   else elim(ptr->sgt);
}
 
void lista::mostrar(lista *ptr){
   if (ptr){
       cout<<ptr->num<<", ";
       mostrar(ptr->sgt);}
   }
 
int main()
{
   lista *ejelista;
   int n;
   char op;
   while (op!='s'){
       cout<<"ingresa el valor a agregar en la lista: ";
       cin>>n;
       ejelista->x(ejelista,n);
       cout<<endl;
       ejelista->mostrar(ejelista);
       cout<<"Si deseas agregar otro numero a la lista"
       <<"marca cualquier tecla que no sea la s";
       cin>>op;
   }
   while (ejelista){
   ejelista->elim(ejelista);
}
   cin.get();
   return EXIT_SUCCESS;
}
El problema (aparte de la eliminacion de memoria, que pos cierto se que se debe hacer con un destructor xD pero pes emepece asi luego veo como hacerlo tipo destructor) es que pareciera que mostrar() nunca se ejecuta... De antemano gracias a quien me ayude...  :-\


En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: Clases y memoria dinamica ¬¬
« Respuesta #1 en: 21 Marzo 2010, 03:59 »

Pensar que punteros los tenias tan claros y ahora con esto de las listas te estas haciendo una mezcla tremenda  ;D.

Te dejo un código que seguro te sirve para lo básico de listas: click, y revisalo a fondo.

En cuanto al código principal, en este momento no tengo ni el editor a mano así que tendrás que depurar.
A simple vista igual creo que tendría que dar una excepción, seguro que solo se cuelga en la función mostrar?

En fin, revisa bien el código que te pase y te sacaras las dudas!



En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Clases y memoria dinamica ¬¬
« Respuesta #2 en: 21 Marzo 2010, 04:53 »

crap...  >:( este temita no me ta gustando  :( entiendo el ejemplo de la pag que me diste, aunque veo que crean muchos punteros auxiliares.. pero lo que no entiendo es porque mi code no funciona  :xD... No se queda pegado... pero no muestra nada... entra a la funcion mostrar() pero no hace los procesos dentro de ella... ademas estuve probando y no llega nunca a la sentencia:
Código
else x(ptr->sgt,n);

Agrego:
Lei bien el link q me mandaste (gracias littlehorse... de nuevo) y pes vi que la taba cag%&$@ mucho(porq modificaba el puntero demasiado xD), y weno lo empece a hacer de nuevo, y pes ahora me ta fallando de nuevo en la funcion mostrar... mira el code... que ta por cierto un poco mas legible;D:
Código
#include <iostream>
 
using namespace std;
 
class lista{
   struct nodo{
       int num;
   nodo *sgt;} *p;
   void elimptr();
   public:
       lista():p(NULL){}
       void nuevo(int);
       void mostrar();
       ~lista(){elimptr();}
};
 
void lista::elimptr(){
   nodo *aux;
   while (p){
       aux=p->sgt;
       delete p;
       p=aux;
   }
}
 
void lista::nuevo(int n){
   nodo *aux,*otro;
   if (!p){
       p=new nodo;
       p->num=n;
       p->sgt=NULL;
   }
   else {
       aux=new nodo;
       aux->num=n;
       aux->sgt=NULL;
       otro=p;
       while (otro) otro=otro->sgt;
       otro=aux;
   }
}
 
void lista::mostrar(){
   nodo *aux;
   aux=p;
   while (aux){
       cout<<aux->num<<", ";
       aux=aux->sgt;
   }
}
 
 
int main()
{
   lista prueb;
   int n;
   char op;
   while (op!='s'){
       cout<<"ingresa el valor a agregar en la lista: ";
       cin>>n;
       prueb.nuevo(n);
       prueb.mostrar();
       cout<<endl;
       cout<<"Si deseas agregar otro numero a la lista"
       <<"marca cualquier tecla que no sea la s";
       cin>>op;
   }
 
   cin.get();
   return EXIT_SUCCESS;
}
El problema es que pes no muestra la lista... na mas la muestra hasta su primer elemento... :-\ Ahora me parece q no estoy tan perdido pero pes no me funciona esa funcion... Por fa diganme el por q?  :huh:
« Última modificación: 21 Marzo 2010, 06:14 por El_nuevo_HH » En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: Clases y memoria dinamica ¬¬
« Respuesta #3 en: 21 Marzo 2010, 19:50 »

Código
while (otro) otro=otro->sgt;

Supongo que ahí esta el error. Vos esperas a que otro (el nodo) sea NULL y ahí recién agregas la referencia al nuevo nodo, cuando en realidad lo que tendrías que estar buscando es que el nodo apunte a NULL (Es decir sea el nodo final y puedas elaborar la referencia correctamente)

No lo puedo probar (mas tarde cuando llegue a casa lo hago), pero supongo que se arreglaría así:

Código
 
while (otro->sgt)
        otro=otro->sgt;
otro->sgt=aux;
 

Probalo!

Un saludo
En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Clases y memoria dinamica ¬¬
« Respuesta #4 en: 21 Marzo 2010, 22:37 »

 ;-) lesto... sip era eso jeje gracias por la ayuda, espero no tener que meterme mas con listas por un buen rato  :xD...  Y el destructor esta bien??... :huh: Me dejo con la duda...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: Clases y memoria dinamica ¬¬
« Respuesta #5 en: 21 Marzo 2010, 23:00 »

De nada!
Con el destructor lo único es que podes declarar solo ~lista() como miembro publico y luego elaborar el mismo código que elimptr en la declaración mas abajo. Pero si a grandes rasgos debería funcionar, ya sabes lo que es un destructor así que en todo caso probalo para comprobarlo!

PD: Entre vos y mapers ya me tienen loco con las listas  :laugh: ;-)

Un abrazo!

En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Clases y memoria dinamica ¬¬
« Respuesta #6 en: 21 Marzo 2010, 23:06 »

Un abrazo!
  :huh:Ya veo que te tienen loca  :xD :laugh: ;-) Pa la otra con el "Un Saludo!" basta jejejeje

PD: Que conste que es hechando broma xD!...
En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.707


Nie Dam Sie


Ver Perfil WWW
Re: Clases y memoria dinamica ¬¬
« Respuesta #7 en: 21 Marzo 2010, 23:34 »

jajajaj, atrevido, la proxima no te saludo  :P :P

Basta de desvirtuar   ;D

Un saludo! :laugh:
En línea


@NeedOfSecurity

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pila dinamica en C, violacion de memoria?????
Programación C/C++
shin_akuma 1 1,121 Último mensaje 15 Febrero 2011, 10:20
por Eternal Idol
Ejemplos de memoria dinamica en cifrado de Beaufort
Programación C/C++
do-while 0 140 Último mensaje 21 Octubre 2011, 04:10
por do-while
Como crear Memoria Dinamica?
Programación Visual Basic
RHL 7 746 Último mensaje 4 Noviembre 2011, 11:18
por BlackZeroX (Astaroth)
Memoria dinámica
Programación C/C++
eleon 6 187 Último mensaje 24 Enero 2012, 22:17
por Eternal Idol
Problemas con manejo de memoria dinamica
Java
Legnak 0 78 Último mensaje 3 Febrero 2012, 17:51
por Legnak
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines