Buenas,
Por un lado, lo de NULL. malloc devuelve NULL si no puede conseguir ese espacio de memoria. Comprobar que malloc no devuelva NULl es una técnica bastante "defensiva" ante errores por memoria (que no haya memoria, que se intente reservar una cantidad contigua de memoria demasiado grande...). En mi opinión, no es común, salvo que sea un código profesional. personalmente te diría que en tu código, de momento, no hagas esas comprobaciones. Son casos muy específicos. Habrá quien opine diferente anyway.
Sobre lo de malloc en Lista, no sé si te sigo bien: Para cualquier estructura que se quiera tener en memoria (en el heap), hay que reservarle memoria. La lista enlazada está compuesta de 2 tipos de estructuras: La lista en sí (lista), y sus elementos (Elemento). Cada vez que se crea una de estas estructuras, hay que reservar con malloc. En caso de Lista, se hará 1 vez por lista que se cree. En casod e Elemento, 1 vez por cada Elemento (Lo que se ve en ins_en_lista_vacia). De hecho, en ins_en_lista_vacia reserva 2 veces: 1 para el Elemento, y otra para el dato que guarda dentro (el char*).
No sé si esto responde bien a tu pegunta 👀
Por un lado, lo de NULL. malloc devuelve NULL si no puede conseguir ese espacio de memoria. Comprobar que malloc no devuelva NULl es una técnica bastante "defensiva" ante errores por memoria (que no haya memoria, que se intente reservar una cantidad contigua de memoria demasiado grande...). En mi opinión, no es común, salvo que sea un código profesional. personalmente te diría que en tu código, de momento, no hagas esas comprobaciones. Son casos muy específicos. Habrá quien opine diferente anyway.
Sobre lo de malloc en Lista, no sé si te sigo bien: Para cualquier estructura que se quiera tener en memoria (en el heap), hay que reservarle memoria. La lista enlazada está compuesta de 2 tipos de estructuras: La lista en sí (lista), y sus elementos (Elemento). Cada vez que se crea una de estas estructuras, hay que reservar con malloc. En caso de Lista, se hará 1 vez por lista que se cree. En casod e Elemento, 1 vez por cada Elemento (Lo que se ve en ins_en_lista_vacia). De hecho, en ins_en_lista_vacia reserva 2 veces: 1 para el Elemento, y otra para el dato que guarda dentro (el char*).
No sé si esto responde bien a tu pegunta 👀