Я продолжаю получать ошибку переполнения стека, но я не могу понять, почему и как ее исправить. Вот мой код:Ошибка переполнения стека - C#
private void ShowDiff(int leftIndex, int rightIndex)
{
if (leftIndex > 0 && rightIndex > 0 &&
_compareFunc(_left[_preSkip + leftIndex - 1], _right[_preSkip + rightIndex - 1]))
{
ShowDiff(leftIndex - 1, rightIndex - 1);
FireLineUpdate(DiffType.None, _preSkip + leftIndex - 1, -1);
}
else
{
if (rightIndex > 0 &&
(leftIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] >= _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex, rightIndex - 1);
FireLineUpdate(DiffType.Inserted, -1, _preSkip + rightIndex - 1);
}
else if (leftIndex > 0 &&
(rightIndex == 0 ||
_matrix[leftIndex, rightIndex - 1] < _matrix[leftIndex - 1, rightIndex]))
{
ShowDiff(leftIndex - 1, rightIndex);
FireLineUpdate(DiffType.Deleted, _preSkip + leftIndex - 1, -1);
}
}
}
Это ошибка, я получаю:
Необработанное исключение типа «System.StackOverflowException» произошло в Comparer.exe
Любая помощь приветствуется.
Вам необходимо тщательно оценить, как ведет себя рекурсивность этого метода, так что вы всегда будете кончать. Может быть, вы даете ему большую часть данных, так что даже если она работает точно так, как должна, она будет потреблять больше, чем размер стека по умолчанию, равный 1 МБ? –
Вы пробовали пройти через него или использовать отладочные отпечатки, чтобы увидеть, что происходит? – pquest
Это классический бесконечный цикл. Как было предложено @pquest, напечатайте значения перед вашей функцией сравнения и где вы называете свою рекурсивную точку (1-й, 2-й или 3-й вызов). Вы легко узнаете, где ваш цикл бесконечен. – rodrigogq