Duda Pasaje Por Valor

Duda Pasaje Por Valor

de Rodrigo Torrado Baluga -
Número de respuestas: 2

Hola! En la diapositiva número 88 del PDF "Estructuras lineales en memoria dinámica" se muestra un procedimiento para  "invertir Lista". En este procedimiento la lista "L" se introduce por valor y la lista "L_inv" por referencia. Mi consulta es: como no hay ningún new dentro del procedimiento, la lista L_inv y L terminan compartiendo memoria? 

Yo asumí que como al pasar por valor se genera "una copia", dicha copia ya es memoria dinámica creada. Es correcto?

En respuesta a Rodrigo Torrado Baluga

Re: Duda Pasaje Por Valor

de Libertad Tansini -

Hola Rodrigo,

en el procedimiento void invLista (Lista l, Lista & l_inv) efectivamente "l" se pasa por valor, pero "l" solo es el puntero inicial que indica donde comienza la lista o donde está el primer nodo. Esto quiere decir que lo que se copia es el puntero inicial no todos los nodos de la lista.

Dado el siguiente ejemplo:

Lista l1= ...

Lista l2= ...

                     l1->| 1 | -> | 2 | -> | 3 | -> | 4 | -> | 5 | ->NULL

Una vez que se invoca a invLista (Lista l1, l2) 

=> l contendrá una copia del puntero l1 (no de todos los nodos) dentro de invLista

=> l2 contendrá el puntero al primer nodo de la lista invertida luego de ejecutado invLista, esta lista está compuesta por los mismos nodos que l1 (comparten memoria)

 => l1 apuntará al último nodo de la lista invertida luego de ejecutado invLista, si no se hace otra asignación

saludos, libertad