diff --git a/generator.c b/generator.c index 0b2df47..553204b 100644 --- a/generator.c +++ b/generator.c @@ -123,17 +123,17 @@ struct Graph *parse(int argc, char *argv[]) fprintf(stderr, "[%s] An edge consists of two " "nodes separated by a dash\n", pname); free(str); - exit(EXIT_FAILURE); + return NULL; } switch (src) { case -2: free(str); - exit(EXIT_FAILURE); + return NULL; break; case -1: fprintf(stderr, "%s\n", edge); free(str); - exit(EXIT_FAILURE); + return NULL; break; default: break; @@ -141,6 +141,7 @@ struct Graph *parse(int argc, char *argv[]) count++; } + free(str); } struct Graph *graph = createGraph(V+1); @@ -176,9 +177,21 @@ int main(int argc, char *argv[]) sigaction(SIGINT, &sa, NULL); sigaction(SIGTERM, &sa, NULL); + struct Graph *graph; + while (quit == 0) { - struct Graph *graph = parse(argc, argv); + graph = parse(argc, argv); + if (graph == NULL) { + for (int i = 0; i < graph->V; i++) { + free(graph->array[i].head); + } + free(graph->array); + free(graph); + exit(EXIT_FAILURE); + } printGraph(graph); + free(graph->array); + free(graph); break; }