Сначала я только начал с C, так что, возможно, я упускаю что-то действительно глупое.
Но у меня есть следующая проблема:
У меня есть функция, которая только дает мне правильное решение, если у меня есть вызов printf. Без этого вызова он дает неправильный результат.
У меня было несколько в коде, чтобы проверить на наличие ошибок, а затем удалил их. Итак, моей первой мыслью было, что я также удалил какой-то важный код, а следующий - что я изменил переменную или что-то еще, когда использовал их в своих вызовах printf.
Но все это было не так, простой "printf (" тест ");" достаточно, чтобы заставить функцию делать то, что я хочу. Это хорошо, но, конечно, я хочу найти проблему, тем более, что в следующий раз она может сработать.
Наверное, мой вопрос: почему вызов printf так сильно влияет на мою функцию? Есть ли общая причина?
Ниже моего кода:
void mergesort(int* array, size_t len)
{
if (len <= 1)
{
return;
}
printf("test");
size_t len2 = len / 2;
int array_left[len2];
int array_right[len-len2];
size_t len_left;
for (len_left = 0; len_left < len2; len_left++)
{
array_left[len_left] = array[len_left];
}
for (size_t i = len2; i < len; i++)
{
array_right[i-len2] = array[i];
}
mergesort(array_left, len_left);
mergesort(array_right, len - len_left);
size_t counter_left = 0;
size_t counter_right = 0;
for (size_t i = 0; i < len; i++)
{
if (array_left[counter_left] <= array_right[counter_right])
{
array[i] = array_left[counter_left];
counter_left++;
}
else
{
array[i] = array_right[counter_right];
counter_right++;
}
}
return;
}