• Martes 30 de Abril de 2024, 06:34

Autor Tema:  Pregunta Sobre Asignacion De Punteros  (Leído 1118 veces)

Ocean Soul

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Pregunta Sobre Asignacion De Punteros
« en: Viernes 28 de Octubre de 2005, 01:21 »
0
Hola de nuevo. Tengo una duda sobre el manejo de punteros de pascal.
En el siguiente codigo:

Código: Text
  1.  
  2. Type
  3.   ptrnodo=^nodo;
  4.   nodo=record
  5.     info:trotulo;
  6.     Hijo,sig:ptrnodo;
  7.     end;
  8.  
  9.   TRIE=ptrNodo;
  10.  
  11.  
  12. Procedure CrearNodo(var A:PtrNodo; x:trotulo);
  13. Begin
  14.      New(A); A^.hijo:=nil; A^.sig:=nil; AsignarRotulo(x, A^.info);
  15. end;
  16. {-------------------------------------------------------------------------------------------}
  17. Procedure AgregarClave(var A:Trie; X:trotulo);
  18. var
  19. I:integer; T,ant:PtrNodo;
  20. Begin
  21.   I:=1; IF A=nil then New(A);
  22.                 t:=a^.hijo;
  23. { ACA! mi pregunta es: En t que se "pone" la ubicacion de a^.hijo (que puede ser NIL o no) o simplemente un puntero NIL (dado el caso), que no tiene nada que ver con el A?
  24. Si sigen leyendo el codigo un poco mas, se van a dar cuenta mejor de lo que pregunto }
  25.  
  26.  
  27.   While (I<=Length(X)) do
  28.   Begin
  29.     While (T<>nil) and (IgualRotulo(T^.info, X[I])) do
  30.     Begin
  31.       Ant:=T;
  32.       T:=T^.hijo;
  33.       Inc(I);
  34.     end;
  35.     If T=nil then CrearNodo(T, X[I]) else
  36.     Begin
  37.       While (T<>nil) and (MenorRotulo(T^.info, X[I])) do
  38.       Begin
  39.         ant:=T;
  40.         T:=T^.sig;
  41.       end;
  42.       If t=nil then CrearNodo(T, X[I]) else
  43.         if Not IgualRotulo(T^.info, x[I]) then
  44.         Begin
  45.           CrearNodo(Ant^.sig, x[I]);
  46.           Ant^.sig^.sig:=T;
  47.           T:=ant^.sig;
  48.         end;
  49.     end;
  50.      T:=T^.hijo; Inc(I);
  51.   end;
  52.         AsignarRotulo(AsignarRotuloNulo, T^.info);
  53. end;
  54.  
  55.  
  56.  
Gracias!

Alpha_

  • Miembro activo
  • **
  • Mensajes: 72
    • Ver Perfil
Re: Pregunta Sobre Asignacion De Punteros
« Respuesta #1 en: Viernes 28 de Octubre de 2005, 17:29 »
0
Código: Text
  1. IF A=nil then New(A);
  2.  
              t:=a^.hijo;

Aquí está la diferencia:

-Si A ya existía, entonces no se crea. Por ende, ahora T apuntará al mismo lugar al que apunta el hijo de A.

-Si A no existía, entonces lo creas. Pero los datos dentro de A no están inicializados, incluyendo los punteros que apuntan a los hijos, por ende, al hacer esa asignación, le estás pasando una dirección basura a T, y por ende, apunta a cualquier lado de la memoria.

Saludos.
Alpha
http]