diff --git a/06_dynamic/namesarchive.c b/06_dynamic/namesarchive.c index 619c5e8..406315d 100644 --- a/06_dynamic/namesarchive.c +++ b/06_dynamic/namesarchive.c @@ -3,7 +3,7 @@ #include #include "namesarchive.h" -static char *names[MAX_NAMES]; +static char **names = NULL; static unsigned int numberOfNames = 0; static int findNameIdx(const char *name); @@ -14,15 +14,27 @@ static int compareNames(const void *arg1, const void *arg2); // Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1. int addName(const char *name) { - if(name != NULL && numberOfNames < MAX_NAMES) + if(name != NULL) { - names[numberOfNames] = malloc(sizeof(*name) * (strlen(name) + 1)); + char **oldMemory = names; + names = realloc(names, sizeof(*names) * (numberOfNames + 1)); - if(names[numberOfNames] != NULL) + if(names == NULL) + names = oldMemory; + else { - strncpy(names[numberOfNames], name, strlen(name)+1); - numberOfNames++; - return 1; + names[numberOfNames] = malloc(sizeof(*name) * (strlen(name) + 1)); + + if(names[numberOfNames] == NULL) + { + names = realloc(names, sizeof(*names) * numberOfNames); + } + else + { + strncpy(names[numberOfNames], name, strlen(name)+1); + numberOfNames++; + return 1; + } } } return 0; @@ -68,6 +80,7 @@ void removeNameByIdx(unsigned int idx) names[i-1] = names[i]; } numberOfNames--; + names = realloc(names, sizeof(*names) * numberOfNames); } int compareNames(const void *arg1, const void *arg2) @@ -99,5 +112,7 @@ void clearArchive() { free(names[i]); } + free(names); + names = NULL; numberOfNames = 0; } \ No newline at end of file diff --git a/06_dynamic/namesarchive.h b/06_dynamic/namesarchive.h index fc1036b..f83700c 100644 --- a/06_dynamic/namesarchive.h +++ b/06_dynamic/namesarchive.h @@ -1,9 +1,6 @@ #ifndef NAMEARCHIVE_H #define NAMEARCHIVE_H -// Maximale Anzahl an Namen -#define MAX_NAMES 100 - // Fügt einen Namen hinzu. Im Fehlerfall (Archiv ist voll) soll 0, ansonsten 1 zurückgegeben werden. // Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1. int addName(const char *name);