ASSIOMA/REGOLA di PLUTONIO (vale notevolmente piu' dell'ORO), sopprattutto in C/C++:
INIZIALIZZARE
SEMPRE LE VARIABILI LOCALI.
Questo viene fatto in automatico SOLO se il TIPO della variabile e' una classe/struttura e questa ha un costruttore di default, ALTRIMENTI devi chiamare esplicitamente il costruttore.
Nel tuo coso, "digraph_t" (che e' un puntatore a "digraph_s", ti direi, 'pessima scelta del nome, meglio chiamarlo 'dgraph_ptr') NON E' una struttura, ma UN PUNTATORE, e i puntatori, LI DEVI INIZIALIZZARE ESPLICITAMENTE:
...
typedef struct dirgraph_s* dirgraph_ptr;
dirgraph_t dirgraph_create(int n) {
int i, j;
dirgraph_ptr graph;
// CHI HA INIZIALIZZATO 'graph' ??????????????
graph->n = n;
..