Programación General > Pascal
Ayuda Sobre Punteros.
(1/1)
Ocean Soul:
Tengo que duda nuevo:
--- Código: Text --- type ptrnodo=^nodo; nodo=record elem:TElemento; {telemento=integer} sig:ptrNodo; end;
Mas adelante, ha una variable: ejemplo:nodo, en el campo sig se le asigna la direccion de memoria x1, luego se hace: dispose(ejemplo^.sig) entonces (ejemplo^.sig<>NIL) y (ejemplo^.sig=x1). Esto es cierto? Yo creo que si, porque "el" dispose debe solo borrar el elemento al que apunta "sig". Es decir borra el elemento de memoria, pero no reescribe en ejemplo^.sig "el" NIL, sino que lo deja como esta, apuntando a nada...
Que me dicen?
Enko:
--- Código: Text --- var Puntero: ^Integer; dir: string;begin New(Puntero); Puntero^ := 5; dir := Format('%p', [Puntero]); WriteLn('Direccion: ', dir, ' valor: ', Puntero^); Dispose(Puntero); WriteLn('Puntero eliminado'); dir := Format('%p', [Puntero]); if(Puntero <> nil) then WriteLn('Direccion: ', dir, ' valor: ', Puntero^) else WriteLn('El puntero es nulo'); readln;end. el resultado (en delphi modo consola) fue:
--- Código: Text --- Direccion: 00A84E40 valor: 5Puntero eliminadoDireccion: 00A84E40 valor: 5
Lo que hace el New es solicitar memoria, el espacio de memoria asignado, queda excusivamente para el uso del programa que lo solicito y no será entregado a ningun otro programa.
Cuando haces Dispose, esa reservación caduca, si bien el puntero sigue apuntado a la direccion de memoria de antes, que sigue teniendo el mismo valor, si otro programa, o en defecto, el tuyo, vuelve a pedir memoria, tal vez se le reserve, otra vez esa direccion de memoria.
Por eso siempre despues de Dispoe, hay que asignar NIL al puntero.
Navegación
Ir a la versión completa