...
int main()
{
eMovie
* movies
= (eMovie
*) malloc(sizeof(eMovie
));...
Lo que hagas aquí, se queda ahí. Lo que vengo a decirte, como el caso de otro hilo similar y reciente, es que C no es C++, y la única forma que tienes para modificar el puntero es retornando el nuevo puntero en la función x o usando un puntero global.
Cuando pasas por referencia pasa eso precisamente, que pasas por referencia, y lo único que puedes hacer con eso es modificar el contenido existente en esa dirección, pero no puedes asignar otro puntero, porque lo que tienes en la función es una copia del puntero que usa la misma referencia que le pasas. Por eso, insisto, retorna el nuevo puntero.
Acostumbra a NO hacer eso :
...
scanf("%s", (movie
+ moves
)->titulo
); scanf("%d", &(movie
+ moves
)->duracion
); ...
Usa variables y luego pásalo luego al objeto. Para pasar un char[] a otro char[] usa el memcpy(). Si tienes pensado usar movie como un array, que no sería lo adecuado, úsalo como un array, no uses aritmética de punteros de esa forma. Ejemplo:
...
scanf("%s", movie
[moves
].
titulo); movie[moves].duracion=duracion;
...
Si vas a retornar el puntero para usarlo como te dije, no liberes el puntero antes de devolverlo (el
free() ese dentro de la función x). Libera la memoria en el main o función principal.
Aquí lo mismo que te dije antes...
void y(eMovie* movie, int tam)
{
for(int i = 0; i < tam; i++)
{
printf("\n\nTITULO: %s\n", (movie
+ i
)->titulo
); printf("DURACION: %d\n", (movie
+ i
)->duracion
); }
}
Usa un array.. ... verás más legible el código.
movie[i].titulo
movie[i].duracion
Y si no, como antes le dije al otro, si quieren trabajar con punteros de forma más flexible y segura usen
C++.