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):
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);
}
}
Qualcuno saprebbe aiutarmi?