diff --git a/numbers.c b/numbers.c index 61ddf4d..8b7c0b5 100644 --- a/numbers.c +++ b/numbers.c @@ -31,9 +31,7 @@ void createchecknumber(unsigned int len, unsigned int numbers[]) do { - unsigned int value = 0; - value = (rand() % (len * 2) + 1); - + unsigned int value = (rand() % (len * 2) + 1); same = 0; for (unsigned int j = 0; j < i; j++) @@ -56,6 +54,11 @@ void createchecknumber(unsigned int len, unsigned int numbers[]) unsigned int *createNumbers(unsigned int len) { + if (len < 2) //sonst Index-Auswahl-Dauerschleife + { + return NULL; + } + if (RANDOM_SEED == 0) { srand(time(NULL)); @@ -68,7 +71,7 @@ unsigned int *createNumbers(unsigned int len) unsigned int *numbers = malloc(sizeof(unsigned int) * len); if (numbers == NULL) { - return 0; + return NULL; // } createchecknumber(len, numbers); @@ -78,9 +81,6 @@ unsigned int *createNumbers(unsigned int len) do { - i = 0; - j = 0; - i = rand() % len; j = rand() % len; @@ -89,7 +89,6 @@ unsigned int *createNumbers(unsigned int len) numbers[i] = numbers[j]; return numbers; - } void sortnumbers(unsigned int numbers[], unsigned int len) @@ -109,15 +108,20 @@ void sortnumbers(unsigned int numbers[], unsigned int len) } } -// Returns only the only number in numbers which is present twice. Returns zero on errors. + unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) { + if (numbers == NULL || len < 2) // sonst Index-Auswahl-Dauerschleife + { + return 0; + } + unsigned int *copynumbers = malloc(sizeof(unsigned int) * len); if (copynumbers == NULL) { return 0; } - + for (unsigned int i = 0; i < len; i++) { copynumbers[i] = numbers[i]; @@ -127,15 +131,15 @@ unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) for (unsigned i = 0; i < len - 1; i++) { - if (copynumbers[i] == copynumbers[i+1]) + if (copynumbers[i] == copynumbers[i + 1]) { unsigned int a = copynumbers[i]; - free (copynumbers); + free(copynumbers); return a; } } - free (copynumbers); + free(copynumbers); return 0; }