![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
![]() Hola amigos, tengo un problema con c++, hice un codigo que supuestamente funciona al correrlo en frio sin embargo en el compilador es otra historia, el problema es con apuntadores.
estoy creando un arbol a partir de un archivo, el cual tiene el siguente formato: padre nombre sexo edad, el arcivo es leido a la perfección y se crea un nuevo nodo en el cual se ingresan los datos del registro, el nodo tiene la siguiente estructura: struct persona{char nombre[10]; char sexo; unsigned int edad;}; struct nodo{persona info; nodo *i,*c,*d; }; nodo *raiz; //una vez leido cada registro se llama a la funcion ingresa(&raiz,nuevo,padre); int ingresa(nodo **rz, nodo *nuevo, char padre[10]){ // rz recibe la dirección de la raiz, nuevo al nuuevo nodo y padre al nombre del padrenodo *r=*rz; // r es una variable apuntador a nodo donde asigno el valor al cual apunta rz para poder trabajar con el// el problema es que por alguna razón al hacer la asignación de r=*rz donde r deberia recibir el valor de la raiz, lo que recibe // es el valor de nuevo if(r==NULL){ r=nuevo; *rz=r; return 1; //asigno el valor de r a la dirección rz osea a la raiz, a pesar de que este es el unico sitio donde se hace // esta asignación y de que aquientra una sola vez el valor de la raiz cambia siemprea al ultimo nodo// "procesado" }else{ if(r->info.nombre==padre){ //esto nunca se cumple porque r->info.nombre tiene el mismo valor que nuevo->info.nombre // aqui va el codigo de la insercion recursiva el cual es irrelevante pues el problema esta en r //la llamada recursiva es asi ingresa(&r->i,nuevo,padre) para r->i, r->c, r->d pero nunca llega hasta aqui... } } el caso es que no se crea el arbol y siempre el valor de la raiz es el ultimo nodo procesado, alguien tiene alguna idea de por que ocurre esto o como solucionarlo?? |
#2
|
||||
|
||||
Aclara un poco más tu pregunta. Esa convinación de código y comentarios es muy difícil de descifrar.
|
#3
|
||||
|
||||
Recuerda poner los tags al código fuente, ejemplo:
![]() Gracias ![]() Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Hola woduro.
Cita:
Código:
int func(nodo **rz, nodo *nuevo, ...) { r = *rz; printf("%s %s", r->info.nombre, nuevo->info.nombre); } Código:
... func(&raiz, nuevo); ... Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 26-06-2012 a las 13:38:45. |
#5
|
|||
|
|||
Resuelto... Ocurre que el nuevo era creado una sola vez antes de entar al bucle que lee el archivo por lo tanto siempre usaba la misma dirección, esa es la razón por la cual la raiz y el nuevo siempre tenian el mismo valor.
El codigo esta en negritas y los comentarios normal no le veo lo confuso, quizas que dentro de los commentarios hay partes resaltadas en negritas pero ye se sabe que son comenterios, en fin cada cual programa a su modo... |
#6
|
||||
|
||||
Cita:
Tal y como he comentado antes, recuerda poner los tags al código fuente, ejemplo: ![]() Gracias ![]()
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda con LISTAS(con cursores,arreglos y apuntadores) | velapuerca88 | Varios | 10 | 23-05-2011 03:14:57 |
Ayucon apuntadores o punteros | alextmb | OOP | 9 | 10-11-2005 23:54:15 |
Enviar un AdoQuery entre dll's con apuntadores | nacho | Tablas planas | 2 | 27-09-2005 23:50:15 |
Pila con Listas enlazadas (problema con apuntadores) | desve | Varios | 2 | 30-03-2005 10:07:47 |
![]() |
|