Programación General > Pascal
Pregunta Sobre Asignacion De Punteros
(1/1)
Ocean Soul:
Hola de nuevo. Tengo una duda sobre el manejo de punteros de pascal.
En el siguiente codigo:
--- Código: Text --- Type ptrnodo=^nodo; nodo=record info:trotulo; Hijo,sig:ptrnodo; end; TRIE=ptrNodo; Procedure CrearNodo(var A:PtrNodo; x:trotulo);Begin New(A); A^.hijo:=nil; A^.sig:=nil; AsignarRotulo(x, A^.info);end;{-------------------------------------------------------------------------------------------}Procedure AgregarClave(var A:Trie; X:trotulo);varI:integer; T,ant:PtrNodo;Begin I:=1; IF A=nil then New(A); t:=a^.hijo; { 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?Si sigen leyendo el codigo un poco mas, se van a dar cuenta mejor de lo que pregunto } While (I<=Length(X)) do Begin While (T<>nil) and (IgualRotulo(T^.info, X[I])) do Begin Ant:=T; T:=T^.hijo; Inc(I); end; If T=nil then CrearNodo(T, X[I]) else Begin While (T<>nil) and (MenorRotulo(T^.info, X[I])) do Begin ant:=T; T:=T^.sig; end; If t=nil then CrearNodo(T, X[I]) else if Not IgualRotulo(T^.info, x[I]) then Begin CrearNodo(Ant^.sig, x[I]); Ant^.sig^.sig:=T; T:=ant^.sig; end; end; T:=T^.hijo; Inc(I); end; AsignarRotulo(AsignarRotuloNulo, T^.info);end; Gracias!
Alpha_:
--- Código: Text ---IF A=nil then New(A); 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.
Navegación
Ir a la versión completa