@cheston

Вылетает программа на C++ с кодом -1073741571 (0xC00000FD)?

Пишу программу на C++ без использования никаких include'ов кроме . Когда делаю ввод (код ниже) переменная l считывается нормально, однако сразу после ввода переменной r программа заканчивает свое действие(хотя должна продолжать) и выдает, что закончена с кодом 1073741571 (0xC00000FD), причем это выводится НЕ как ошибка.
int l;
int r;
cin >> l;
cin >> r;

p.s код приведен неполный, при надобности могут скинуть всю программу
p. p. s ссылка на полный код - https://pastebin.com/cL49mJnh
p. p. p. s ввожу:
5
2 2 2 1 5
2
2 3
2 5
  • Вопрос задан
  • 544 просмотра
Пригласить эксперта
Ответы на вопрос 3

cin >> r; // этот ввод пролетает так как в r попадает \n от предыдущего ввода
l--;
r--; // ошибка скорей всего здесь - не понятно что он декрементирует
Ответ написан
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Попробуйте пройдтись дебаггером, или отладочный вывод везде добавить. В каждую функцию, в каждый цикл. Тогда станет понятнее, где оно падает.

А так вижу несколько ошибок. Обычно дерево отрезков реализуют только на массиве длинной в степень двойки. Добейте a нулями, до степени двойки. И тогда массив t может быть только в 2 раза больше a, а не в 4.

Далее, при реализации get надо, если отрезок вершины лежит внутри отрезка запроса, возвращать t[v]. в противном случае надо запускаться слева и справа, но тольо если запрос торчит в нужную сторону. Вы не запускаетесь от левого сына, если l > m, например. Можно считать значение 0, если рекурсивного вызова нет. В конце берете gcd двух половинок.
Ответ написан
@res2001
Developer, ex-admin
Если вы под виндой, то запустите программу в дебагере без точек останова. Когда произойдет ошибка, то дебагер остановится в том месте где произошла ошибка, перейдете по стеку вызовов к вашему последнему вызову (т.к. ошибка может проявляться где-то в коде стандартной библиотеке) и начнете анализировать это место программы.

В линуксах надо включить создание coredump в ОС, выполнить программу, получить файл coredump и проанализировать его в gdb. Схема анализа кода та же, что под виндой.

Возможно у вас выход за пределы массива. При анализе внимательно смотрите на используемые индексы и размеры выделенного вектора к которому идет обращение.

Результаты вашего анализа можете скинуть сюда.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы