@een0t

Почему при запуске программы выдаёт Исключение не обработано?

Написал программу по алгоритмы Хоара, после ввода размера массива выводится сам массив, а затем выдаёт ошибка : Необработанное исключение по адресу 0x007B2469 в Lab5, Task 5.4b.exe: 0xC00000FD: Stack overflow (параметры: 0x00000001, 0x005E2F7C). и отсортированный массив не выводится.

Вот сам код, подскажите где и в чём ошибка?

spoiler
#include <cstdlib>
#include <Windows.h>
#include <iostream>
#include <ctime>

using namespace std;

void arr_sort(int* arr, int first, int last)
{
	int mid, dop;
	int f = first, l = last;
	mid = arr[(f + 1) / 2];
	do
	{
		while (arr[f] < mid) f++;
		while (arr[l] > mid) l--;
		if (f <= l)
		{
			dop = arr[f];
			arr[f] = arr[l];
			arr[l] = dop;
			f++;
			l--;
		}
	} while (f < l);
	if (first < l) arr_sort(arr, first, l);
	if (f < last) arr_sort(arr, f, last);
}

int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	int n;
	cout << "Введите размер массива: "; cin >> n;
	int* arr = new int[n];
	for (int i = 0; i<int(n); i++)
		arr[i] = rand() % 200 - 100;
	cout << "Исходный массив: ";
	for (int i = 0; i<int(n); i++)
		cout << arr[i] << " ";
	cout << "\n";
	cout << " Отсортированный массив: ";
	arr_sort(arr, 0, n - 1);
	for (int i = 0; i < n; i++) {
		cout << arr[i] << " ";
	}
	cout << "\n";
	system("PAUSE");
	return 0;
}
  • Вопрос задан
  • 518 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Это значит, что вы где-то накосячили с рекурсией и arr_sort вызывается до тех пор, пока не произойдёт переполнение стека (stack overflow).
Ну, а поскольку никакого обработчика исключений вы не используете, то исключение нигде и не обрабатывается.
P.S. И если не понимаете сути алгоритма, то перепечатывать его надо тщательнее. Здесь должна быть не единица, а l.
mid = arr[(f + l) / 2];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы