[Mayo 2010] Dispose Duda

[Mayo 2010] Dispose Duda

de Cristina Belen Techera Cedres -
Número de respuestas: 2

Buenos días. Tengo la siguiente duda:

Modula por defecto al hacer DISPOSE deja el puntero apuntando a NIL. Por lo tanto, como los ejercicios piden ser implementados en Modula mi razonamiento sería luego de hacer un DISPOSE no actualizar el puntero para que quede apuntando a NIL. Ahora bien, algunas soluciones toman esto en cuenta y otras no.

Por ejemplo, en el parcial 2010 ejercicio 2. Tiene una lista doblemente encadenada y piden eliminar el elemento que se encuentra en la posición p. En el caso que la lista tiene un solo elemento, sabiendo que uno se encuentra programando en Modula realizaría simplemente DISPOSE (aBorrar), en cambio la solución plantea primero hacer L= NIL y luego el DISPOSE.

Mi duda sería, ¿ambas cosas son tomadas como válidas? O por tener un estilo mas ordenado a la hora de programar lo considerado correcto sería siempre mandarlo al NIL aunque el DISPOSE ya lo haga?

 

Muchas gracias.

En respuesta a Cristina Belen Techera Cedres

Re: [Mayo 2010] Dispose Duda

de Lorena Etcheverry -

Hola Cristina:

en la solución publicada del ejercicio 2 se utiliza una variable auxiliar aBorrar, de tipo LDNat, en la cual se almacena una referencia al nodo a borrar. El borrado físico se hace con la instrucción DISPOSE al final del procedimiento.

Como tu bien mencionás Modula-2 asegura de que luego de hacer DISPOSE(x), siendo x una variable de tipo puntero, x referencia al valor NIL. La operación de DISPOSE libera la memoria que ocupaba "lo apuntado por x" y además hace que x valga NIL.

Suponete que tenemos las variables x,y de tipo puntero y el siguiente par de instrucciones:

x := y

DISPOSE(x)

¿cuál es el valor de y luego de hacer el DISPOSE?

Si querés podés pensarlo con dos variables x, y de tipo CARDINAL. La analogía no es del todo completa pero vale para el punto que quiero que veas.

y:=4

x:=y

Luego, en lugar de hacer DISPOSE(x) suponete que hago x:=5. ¿cuál es el valor de y luego de cambiar el valor de x?

saludos

Lorena