• Miércoles 11 de Diciembre de 2019, 01:00

Autor Tema:  Ayuda Sobre Punteros.  (Leído 642 veces)

Ocean Soul

  • Miembro activo
  • **
  • Mensajes: 38
    • Ver Perfil
Ayuda Sobre Punteros.
« en: Jueves 5 de Octubre de 2006, 16:07 »
0
Tengo que duda nuevo:
Código: Text
  1.  
  2. type
  3.      ptrnodo=^nodo;
  4.      nodo=record
  5.                      elem:TElemento; {telemento=integer}
  6.                      sig:ptrNodo;
  7.                      end;
  8.  
  9.  

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

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda Sobre Punteros.
« Respuesta #1 en: Jueves 5 de Octubre de 2006, 16:15 »
0
Código: Text
  1.  
  2. var
  3.   Puntero: ^Integer;
  4.   dir: string;
  5. begin
  6.   New(Puntero);
  7.   Puntero^ := 5;
  8.   dir := Format('%p', [Puntero]);
  9.   WriteLn('Direccion: ', dir, '  valor: ', Puntero^);
  10.   Dispose(Puntero);
  11.   WriteLn('Puntero eliminado');
  12.   dir := Format('%p', [Puntero]);
  13.   if(Puntero &#60;&#62; nil) then
  14.       WriteLn('Direccion: ', dir, '  valor: ', Puntero^)
  15.   else
  16.       WriteLn('El puntero es nulo');
  17.       readln;
  18. end.
  19.  
  20.  
el resultado (en delphi modo consola) fue:
Código: Text
  1.  
  2. Direccion: 00A84E40  valor: 5
  3. Puntero eliminado
  4. Direccion: 00A84E40  valor: 5
  5.  
  6.  

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.