Полный код здесь . Начальная проблема здесь .
По какой-то причине этот код работает отлично:
for (int i = n - 2; i > -1 ; i--)
{
if (strcmp(s[i], s[i + 1]) < 0)
{
k = i;
for (int j = n - 1; j > k; j--)
{
if (strcmp(s[k], s[j]) < 0)
{
l = j;
swap(s, k, l);
reverse_sequence(s, k + 1, n - 1);
return 1;
}
}
}
}
return 0;
При замене внутреннего for на разрыв и написании его после первого для:
for (int i = n - 2; i > -1 ; i--)
{
if (strcmp(s[i], s[i + 1]) < 0)
{
k = i;
break;
}
}
for (int j = n - 1; j > k; j--)
{
if (strcmp(s[k], s[j]) < 0)
{
l = j;
swap(s, k, l);
reverse_sequence(s, k + 1, n - 1);
return 1;
}
}
return 0;
Попадание во время выполнения. Оба печатают правильные варианты.
Что здесь вообще происходит?
Редактировать: если я добавлю
if (i == 0 && k == -1)
return 0;
после if в первом цикле, он ведет себя как задумано. Таким образом, ясно, что происходит то, что он сравнивает s [-1] (k инициализируется в -1) с чем-то, и он падает.