diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2016-03-17 23:02:59 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2016-03-17 23:33:23 +1300 |
commit | 316b49df8c4226134496249675b9fe505cf3b31c (patch) | |
tree | 108d41c3d23f591a2fc1c2aafe3172b108f143b0 | |
parent | Both tools working now (diff) | |
download | tunics-316b49df8c4226134496249675b9fe505cf3b31c.tar.gz tunics-316b49df8c4226134496249675b9fe505cf3b31c.zip |
Free some memory; appease valgrind(1)
-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 |