diff options
-rw-r--r-- | sort.c | 13 | ||||
-rw-r--r-- | sort.h | 1 |
2 files changed, 14 insertions, 0 deletions
@@ -10,12 +10,14 @@ int main(void) { while ((line = read_line(stdin)) != NULL) { vec_add(lines, line); } + free(line); qsort(lines->data, lines->count, sizeof(char *), qsort_strcmp); for (i = 0; i < lines->count; i++) { fputs(lines->data[i], stdout); } + vec_free(lines); exit(EXIT_SUCCESS); } @@ -34,6 +36,7 @@ char *read_line(FILE* stream) { for (;;) { if (fgets(buf, BUF_SIZE, stream) == NULL) { free(buf); + free(line); return NULL; } line = strncat(line, buf, BUF_SIZE); @@ -66,6 +69,16 @@ void vec_add(vec *v, char *s) { return; } +void vec_free(vec *v) { + unsigned long i; + for (i = 0; i < v->count; i++) { + free(v->data[i]); + } + free(v->data); + free(v); + return; +} + static int qsort_strcmp(const void *p1, const void *p2) { return strcmp(* (char * const *) p1, * (char * const *) p2); } @@ -16,6 +16,7 @@ typedef struct { char *read_line(FILE* stream); vec *vec_init(void); void vec_add(vec *v, char *s); +void vec_free(vec *v); static int qsort_strcmp(const void *p1, const void *p2); #endif |