Chiedo scusa per l'imprecisione del codice riportato. In realtà il codice nel programma è giusto, infatti gli altri campi (che per semplificazione non ho riportato) li leggo tranquillamente all'interno della funz2:

codice:
struct esempio{ int *vita; };
struct esempio *link;

funz1(){
  struct esempio *link;
  int vita = 1;

  link = (struct esempio*)malloc(sizeof(struct esempio));

  link->vita = &vita;
}

funz2(){
  link->vita--;
}