Il problema è che mi dà questo warning ora, mentre su un'altra struttura dati come un albero rb non me lo dà facendo il debug.
scusa ma allora perchè mi si verifica poi un errore in esecuzione?
Non avevi parlato di errori in esecuzione, ma solo di warning che di per se non è un errore.

Comunque non serve eseguire il codice per accorgersi del possibile l'errore:
codice:
graph *creategraph() {

   graph* grafo = (graph*) malloc(sizeof(graph));
   if (!grafo) {
      fprintf(stderr,"Errore di allocazione A\n");
      exit(-1);
   }
   
   grafo->adiacenza = (nodo_lista*) malloc (sizeof(nodo_lista)); 
   if(!grafo->adiacenza ) {
      fprintf(stderr,"Errore di allocazione B\n");
      exit(-2);
   }
   grafo->adiacenza = NULL; /* BOOM!!! */
   grafo->next = NULL;
   //grafo->info = NULL;
   return grafo;
}
In pratica prima allochi il campo, poi lo annulli (perdendo la possibilità di deallocarlo in seguito). Appena usi quel campo il programma va in crash.