Esta es la estructura del nodo, según lo que entiendo yo , en tNodo tengo el dato a guardar, y la dirección del siguiente nodo . Y luego defino un alias tipo puntero (?) de tipo tNodo .
typedef struct Nodo { /* ... */ } tNodo;
Ahí estás definiendo una estructura, cuyo nombre oficial es "struct Nodo", a dicha estructura le asignas un alias, "tNodo". De esta forma "struct Nodo" y "tNodo" son equivalentes. Se podría hacer también en dos pasos (por si te resulta más claro):
struct Nodo { /* ... */ };
typedef struct Nodo tNodo;
En la primera línea se define la estructura "Nodo" y en la segunda creamos el alias.
typedef tNodo *TipoLista;
Ahí estás creando un alias nuevo, "TipoLista", este alias es equivalente a "tNodo*", es decir, es un puntero a una estructura de tipo "tNodo"
nodo = (TipoLista) malloc(sizeof(TipoLista));
Si TipoLista es un alias de "struct Nodo*" entonces sizeof(TipoLista) devuelve el tamaño de un puntero, no de una estructura. La consecuencia es que no estás reservando la memoria suficiente para almacenar una estructura de tipo "Nodo". Hay que ser cuidadoso a la hora de usar alias, si en algún momento no tienes claro el uso del alias vas a meter la pata fijo.
nodo = (TipoLista) malloc(sizeof(tNodo));
Ahora, malloc reservará una cantidad de memoria suficiente para almacenar un "struct Nodo" y te devolverá el puntero correspondiente, que sí podrás usar sin problemas porque no vas a pisar memoria que no te pertenece.
no tengo que poner * primero, ejemplo *nodo->dato=carga_uno() ??
Hay dos formas de acceder a los elementos de una estructura a la que accedes a través de un puntero:
TipoLista nodo = FuncionQueMeDevuelveUnNodoValido( );
TipoLista siguiente1 = nodo->sig;
TipoLista siguiente2 = (*nodo).sig;
"siguiente1" y "siguiente2" van a apuntar ambas al mismo sitio. En el primer caso hemos hecho uso del operador de referencia "->". Este operador indica que nuestra variable es realmente un puntero y que accedemos a sus elementos por referencia, no por valor. En el segundo caso estamos haciendo uso del operador "*" que nos permite acceder por valor a los elementos del puntero, como ya no estamos trabajando con punteros debemos usar el operador "." para acceder a sus elementos.
No se si con estas explicaciones te aclaro un poco el asunto. Si tienes más dudas no tengas inconveniente en preguntar.
Un saludo.