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 &#60;&#62; 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

[0] Índice de Mensajes

Ir a la versión completa