Retroceder   Foros del Web > Temas generales de computación > Programación > C/C++

Respuesta
 
Herramientas Desplegado
Antiguo 16-dic-2006, 11:53   #1 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Mensaje Problema con listas enlazadas

Que tal, estoy realizando un programa con listas enlazadas, pero tengo un error en mi funcion que inserta un nuevo nodo en la lista, parte de mi codigo es este:

Cita:
struct stNodo
{
int dato;
stNodo *enlace;
};

typedef stNodo* ApuntaNodo;

// dentro del main tengo esto:

ApuntaNodo cabeza;
cabeza = new stNodo;
cabeza->dato = 1;
cabeza->enlace = NULL;

// Para agregar un nuevo nodo esta es mi funcion:

insertar_cabeza(ApuntaNodo& cabeza, int el_numero);

// al declarar la funcion, me marca el error que coloque mas a bajo

void insertar_cabeza(ApuntaNodo& cabeza, int el_numero)
segun yo y mis apuntes esta bien la sintaxis, pero al compilarlo me marca un error, al parecer en la direccion, pero como no soy bueno con el ingles les escribo lo que me aparece jejejeje:

Cita:
expected primary-espression before '&' token
si me pueden ayudar les agradeceria infinitamente, por si no me explique bien, el error me lo marca en la funcion no en el main.


Saludos...
BLEND está desconectado   Responder Citando
Antiguo 16-dic-2006, 12:50   #2 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Re: Problema con listas enlazadas

Que tal, ya pude resolver mi problema, tenia mal declarada la llamada a mi funcion.

Otra cosa, al utilizar new tengo que utilizar delete o no, por ejemplo:

Cita:
ApuntaNodo cabeza;
cabeza = new stNodo;

// Tengo que eliminar el objeto

delete(cabeza);
agradeceria sus respuestas, ya que en las FAQ'S, solo enonctre sobre malloc/free
BLEND está desconectado   Responder Citando
Antiguo 16-dic-2006, 14:06   #3 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

Para cada new debe haber su delete correspondiente.
MaxExtreme está desconectado   Responder Citando
Antiguo 16-dic-2006, 15:26   #4 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Re: Problema con listas enlazadas

Hey Max, pero por ejemplo en este codigo que tengo, como se supone que elimino la variable apTemp2, ya que si coloco el delete(apTemp2), tengo conflictos a la ora de visualizar mis datos, ya que, creo yo, los nodos se pierden, entonces si no lo elimino no hay problema, y siquiero eliminarla fuera del case, ya no puedo hacerlo, lo tendria que hacer mejor con una funcion o algo asi.

Cita:
#include <stdio.h>
#include <stdlib.h>

struct stNodo
{
int dato;
stNodo *sig;
};

typedef stNodo* apNodo;

int main()
{
int opc,num;
apNodo cabeza = new stNodo;
if(!cabeza)
{
printf("ERROR: no hay suficiente memoria disponible");
exit(1);
}
cabeza->dato = 0;
cabeza->sig = NULL;
do
{
printf("\n1.- Ingresa");
printf("\n2.- Visualiza");
printf("\n3.- Salir");
scanf("%d",&opc);
switch(opc)
{
case 1:
apNodo apTemp = new stNodo;
if(!apTemp)
{
printf("ERROR: No hay memoria suficiente");
exit(1);
}
system("cls");
printf("Numero: ");
scanf("%d",&num);
apTemp->dato = num;
apTemp->sig = cabeza;
cabeza = apTemp;
//delete apTemp;
break;
case 2:
apNodo apTemp2 = new stNodo;
if(!apTemp2)
{
printf("ERROR: No hay memoria suficiente");
exit(1);
}
apTemp2 = cabeza;
while(apTemp2->sig)
{
printf("Dato: %d\n",apTemp2->dato);
apTemp2 = apTemp2->sig;
}
system("pause");
delete apTemp2;
break;
}
}while(opc != 3);
delete cabeza;
system("pause");
return 0;
}
disculpen si el codigo es algo ambiguo, solo estoy practicando.

Otra duda, que diferencia existe entre utilizar el malloc/free y el new/delete, ya que a mi se me hace mas facil manejar las listas enlazadas con new/delete, gracias.


Saludos.
BLEND está desconectado   Responder Citando
Antiguo 16-dic-2006, 16:30   #5 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

Estas programando en C, no en C++.

Debes usar solo malloc y free. New y delete son exclusivamente de C++.

int *x = malloc(5 * sizeof(x));
...
free(x);
MaxExtreme está desconectado   Responder Citando
Antiguo 16-dic-2006, 17:07   #6 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Re: Problema con listas enlazadas

Pero si es permitido mezclar C con C++, o se tiene que seguir esos entandares ?
BLEND está desconectado   Responder Citando
Antiguo 16-dic-2006, 17:39   #7 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

C es una cosa.
C++ es otra cosa.

Si mezclas, obtendrás algo que, aunque te funcione a ti, ni es estándar, ni portable, ni nada.

Cualquier exposición pública de tu código sería rechazada.

En privado, haz lo que quieras :)
MaxExtreme está desconectado   Responder Citando
Antiguo 16-dic-2006, 18:40   #8 (permalink)
Instru está en el buen camino
 
Avatar de Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.442
Re: Problema con listas enlazadas

Ahi si noe stoy muy de acuerdo.

Una cosa es saber diferenciar sobr elos lenguajes y otra mezclarlos.
Y en mi opinion no hay ningun problema al mezclarlos, siempre y cuando no hagas un revoltijo de hacer "new" y luego "free".
Yo acostumbro a dividir mis programas en modulos unos escritos en C++ y otros en C. O incluso usar caracteristicas de C y de C++ en un mismo modulo.
no pasa nada, es legible, funciona y es aceptado.

Efectivamente son 2 lenguajes diferentes aunque en si son un conjunto y no veo el problema en juntarlos sino, para eso usaria Java en vez de C++.

Saludos
__________________
Usa las putas faqs:
http://www.forosdelweb.com/showthread.php?t=264647
Instru está desconectado   Responder Citando
Antiguo 16-dic-2006, 18:45   #9 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

Cita:
Iniciado por Instru Ver Mensaje
Yo acostumbro a dividir mis programas en modulos unos escritos en C++ y otros en C.
Eso no es mezclarlo. Una vez el código ha sido convertido en un objeto (.o), da igual.

Cita:
O incluso usar caracteristicas de C y de C++ en un mismo modulo.
no pasa nada, es legible, funciona y es aceptado.
En eso ya no estoy de acuerdo. :P

Esto no es muy claro, pese a que funcione:

Código:
char x[] = "Hola C.\n";
std::string y("Hola C++.\n");
char *z = new char[strlen(x) + strlen(y.c_str())];
strcpy(z, y.c_str());
strcat(z, x);
std::cout << z << '\n' << std:.endl;
free(z);
Y en cualquier caso, aunque C++ soporte en general C, pueden aparecer más problemas...
MaxExtreme está desconectado   Responder Citando
Antiguo 16-dic-2006, 18:53   #10 (permalink)
Instru está en el buen camino
 
Avatar de Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.442
Re: Problema con listas enlazadas

Jajjaja. Eso es hacer batido de C y de C++. Yo no hablo de ese tipo de mezclas, digo si voy a usar chars uso chars y nada mas, si voy a usar la clase string pues nada mas eso y ya. A lo que me refiero con la mezclar es por ejemplo crear una clase con chars dentro de ella, usar true y false(aunque al parecer ya estan en el estandar C99). Usa un poco la STl en un programa que a simple vista es C. Cosas asi.
Lo que tu pusiste es revolver, lo que si no se debe hacer, de lo que hablo es mezclar inteligentemente.

Saludos.
__________________
Usa las putas faqs:
http://www.forosdelweb.com/showthread.php?t=264647
Instru está desconectado   Responder Citando
Antiguo 16-dic-2006, 20:22   #11 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

Cita:
Iniciado por Instru Ver Mensaje
Jajjaja. Eso es hacer batido de C y de C++. Yo no hablo de ese tipo de mezclas, digo si voy a usar chars uso chars y nada mas, si voy a usar la clase string pues nada mas eso y ya. A lo que me refiero con la mezclar es por ejemplo crear una clase con chars dentro de ella, usar true y false(aunque al parecer ya estan en el estandar C99). Usa un poco la STl en un programa que a simple vista es C. Cosas asi.
Lo que tu pusiste es revolver, lo que si no se debe hacer, de lo que hablo es mezclar inteligentemente.
Para usar "const", namespaces, "inline", y otras sutilezas, es que estás usando C++.

Recordemos que C++ tiene 3 paradigmas, no tiene porqué aparecer una clase o template.
MaxExtreme está desconectado   Responder Citando
Antiguo 17-dic-2006, 03:19   #12 (permalink)
Nivel7 no se puede cailificar en este momento
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Re: Problema con listas enlazadas

Tu problema no es con el uso de la memoria dinamica(en este caso new y delete), sino en tu algoritmo en sí.

tu cabeza que se supone tiene que ser el primer nodo en realidad es el ultimo, por estar usano algo muy similar al algoritmo de ordenacion de burbuja. ademas tus supuestos nodos apTemp en realidad no los usas como temporales sino que en realidad ellos forman tu lista es por eso que al eliminarlos te elimina tus datos.

no para el uso de new y delete sino para la implementacion de tus listas sería bueno que implementaras unas funciones que realicen una veraddera tarrea de llenado de lista.(enlazar nodos).
un error agregado es la declaracion de variables dentro de los bloques case: para poder hacerlo tienes que crear un bloque {} para que tus variables puedan ser destruidas al abandonar el bloque.
en tu caso usas punteros que manualmete eliminarias, pero aun asi es recomendable usar un bloque {}o en su caso usar una funcion.

en tu caso en particular, parese que tu codigo esta basado en C, por tanto seria bueno que siguieras asi.
si fuese lo contrario no seria tan estricto.
Un compilador de C no permite codigo C++, pero un compilador de C++ si permite codigo de C.
Nivel7 está desconectado   Responder Citando
Antiguo 17-dic-2006, 09:44   #13 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Re: Problema con listas enlazadas

¡¡¡ Hey muchas gracias por todos lo comentarios !!!, de verdad que es bueno saber todo ese tipo de cosas que dificilmente ve uno en la escuela, y solo se logra aprender preguntando a la gente con mayor experiencia.

Cita:
char x[] = "Hola C.\n";
std::string y("Hola C++.\n");
char *z = new char[strlen(x) + strlen(y.c_str())];
strcpy(z, y.c_str());
strcat(z, x);
std::cout << z << '\n' << std:.endl;
free(z);
Tampoco me referia a eso MaxExtreme ;P jajaja, como menciona Instru, no quiero mezclarlo nadamas por que si, si no llevar una sintaxis logica y sistematica de lo que realmente quiero hacer. El detalle que tenia era saber cual era esa diferencia.

Una ultima peticion, si es que se puede, he buscado cual es la diferencia exacta entre C y C++, ce que la pregunta es un poco trillada, pero en realidad no entiendo muy bien cual sea la diferencia, y tambien acerca de los Estandares.

Tambien gracias Nivel7, el codigo que coloque lo hice como prueba, aunque pense que estaba bien, ya veo que no ;P, gracias por los comentarios.

Saludos.
BLEND está desconectado   Responder Citando
Antiguo 17-dic-2006, 12:06   #14 (permalink)
MaxExtreme ha deshabilitado el karma
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Re: Problema con listas enlazadas

Cita:
Iniciado por BLEND Ver Mensaje
cual es la diferencia exacta entre C y C++
Demasiadas. En resumidas cuantas:

1. Tenemos C, que tiene el paradigma estructurado.
2. Luego apareció C++, que es un C con dos nuevos paradigmas: Programación Orientada a Objetos y Programación Genérica (o con plantillas); además de otras mil cosas.

Tu problema es que estás mezclando cosas de C y C++. Las funciones que usas y en general el estilo que utilizas es C.

Sin embargo, usas "new" y "delete", que sólo existen en C++.
MaxExtreme está desconectado   Responder Citando
Antiguo 17-dic-2006, 12:51   #15 (permalink)
Instru está en el buen camino
 
Avatar de Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.442
Re: Problema con listas enlazadas

HEY!!! QUE PASA esa pregunta esta super explicada en las FAQs.....
Se nota que no las has checado.

Saludos
__________________
Usa las putas faqs:
http://www.forosdelweb.com/showthread.php?t=264647
Instru está desconectado   Responder Citando
Antiguo 17-dic-2006, 16:20   #16 (permalink)
BLEND ha deshabilitado el karma
 
Avatar de BLEND
 
Fecha de Ingreso: marzo-2006
Mensajes: 82
Re: Problema con listas enlazadas

Cita:
HEY!!! QUE PASA esa pregunta esta super explicada en las FAQs.....
Se nota que no las has checado.
Pues que crees Instru que ya las habia leido, pero igual y no puse atencion, chale, las revisare y creo que me queda mas claro revisar las FAQ's antes de postear algo ;P jejejeje.


Saludos.
BLEND está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 19:45.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93