Salve a tutti, come esercizio universitario dovrei creare in C un grafo con matrice di adiacenza (per il momento vuoto), stamparlo ed eliminarlo. Il problema è che il programma smette di funzionare durante l'allocazione della matrice, e non capisco perchè. Questo è il codice (è solo una bozza, so che è pieno di difetti ma mi serve solo per vedere se le funzioni sono corrette):
Qualcuno saprebbe aiutarmi?codice:#include<stdio.h> #include<stdlib.h> struct dirgraph_s { int** adj; //Matrice di adiacenza. int n; //Numero di nodi del grafo. }; typedef struct dirgraph_s* dirgraph_t; dirgraph_t dirgraph_create(int n) { int i; dirgraph_t graph; graph->adj = (int**)malloc(n*sizeof(int *)); //allocazione array di puntatori a righe for(i=0; i<n; i++) //allocazione riga per ogni puntatore dell'array graph->adj[i] = (int *)malloc(n*sizeof(int)); return graph; } int dirgraph_destroy(dirgraph_t graph) { if(graph->adj != NULL) { free(graph); return 1; } else if(graph->adj == NULL) return -1; else return 0; } int main() { dirgraph_t graph; int i, n; printf("Scegliere cosa fare:\n0 - Eliminare il grafo e chiudere il programma.\n1 - Creare il grafo.\n2 - Stampare il grafo.\n"); scanf("%d", &i); if(i == 0) { int out = dirgraph_destroy(graph); if(out == 1) printf("Il grafo è stato cancellato correttamente.\n"); else if(out == 0) printf("Il grafo è già vuoto.\n"); else printf("Errore.\n"); } else if(i==1) { printf("Inserire il numero di vertici presenti nel grafo:\t"); scanf("%d", &n); graph = dirgraph_create(n); } else if(i==2) { int n1, n2; if(graph->adj != NULL) { for(n1=0; n1<n; n1++) { for(n2=0; n2<n; n2++) { printf("%d\n", graph->adj[n1][n2]); } } } else printf("Errore: grafo non trovato."); } else { printf("Errore: comando non valido.\n"); exit(1); } }

Rispondi quotando