From 9394b51158220c27e18830beaccbbe16edfc307f Mon Sep 17 00:00:00 2001 From: Simon Wiesend Date: Sun, 7 Dec 2025 17:48:50 +0100 Subject: [PATCH] fix: getDuplicate() must not modify const numbers array --- numbers.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/numbers.c b/numbers.c index 5211acb..ef96dc2 100644 --- a/numbers.c +++ b/numbers.c @@ -74,13 +74,27 @@ unsigned int *createNumbers(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) { - qsort((void *)numbers, len, sizeof(int), compareInt); // sort the array + unsigned int *numbersCpy = malloc(sizeof(unsigned int) * len); + if (!numbersCpy) + { + return 0; + } + memcpy(numbersCpy, numbers, len * sizeof(unsigned int)); + numbersCpy = numbersCpy; // shadow the numbers array with copy + + qsort((void *)numbersCpy, len, sizeof(int), compareInt); // sort the array + + unsigned int duplicateFound = 0; // zero on errors for (int i = 0; i < len - 1; i++) { - if (numbers[i] == numbers[i + 1]) - return numbers[i]; + if (numbersCpy[i] == numbersCpy[i + 1]) + { + duplicateFound = numbersCpy[i]; + break; + } } - return 0; // zero on errors + free(numbersCpy); + return duplicateFound; } static int compareInt(const void *ptr1, const void *ptr2)