Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 14.03.2024
Сообщений: 7

Ошибка runtime Error

14.03.2024, 21:40. Показов 4821. Ответов 28

Студворк — интернет-сервис помощи студентам
Решаю задание на сайте Яндекс Контест, используется компилятор g++17 7.3 controlled. Отправляю написанную мной программу, в ответ получаю runtime error со следующим сообщением чекера:
Completion status: ABNORMAL_EXIT
Term sig: ABRT
Error code: null

Не понимаю, в чем ошибка, возможно, для более опытных выглядит глупо. Прошу, помогите.

Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <vector>
using namespace std;
size_t x = 0;
int y = 0;
 
struct Node { // Создаем структуру, хранящую в себе указатель на следующий элемент и значение value
    Node* next;
    int value;
    Node(Node* next, int value) : next(next), value(value) {}
};
 
size_t sizeOfList(Node* first) { // Узнаем размер списка проходясь по указателям
    if (first != nullptr) {
        x = x + 1;
        sizeOfList(first->next);
    }
    return x;
}
 
Node* constructNode(int value) { // Создаем новый узел списка
    Node* cons = new Node(nullptr, value);
    return cons;
}
 
void pushBack(Node* first, int value) {// Добавляем в конец списка узел
    if (first->next != nullptr) {
        pushBack(first->next, value);
    }
    else {
        Node* pos = new Node(nullptr, value);
        first->next = pos;
    }
}
 
Node* pushFront(Node* first, int value) {//Добавляем узел в начало списка
    Node* pos = new Node(first, value);
    return pos;
}
 
int sumOfList(Node* first) {// Находим сумму узлов в списке
    if (first != nullptr) {
        y = y + first->value;
        sumOfList(first->next);
    }
    return y;
}
 
void deleteList(Node* first) {// Удаляем список
    if (first) {
        deleteList(first->next);
        delete first;
    }
}
 
int maxOfList(Node* first) {// Находим максимальное значение в списке
    int max = first->value;
    while (first != nullptr) {
        if (first->value > max) {
            max = first->value;
        }
        first = first->next;
    }
    return max;
}
 
vector<int> getVectorFromList(Node* first) {// Создаем вектор идентичный списку
    vector<int> mas;
    while (first != nullptr) {
        mas.push_back(first->value);
        first = first->next;
    }
    return mas;
}
 
bool compareLists(Node* first1, Node* first2) {// Сравниваем списки, если одинаковые - true, если различные - false
    while (first1 != nullptr && first2 != nullptr) {
        if (first1->value != first2->value) {
            return false;
        }
        first1 = first1->next;
        first2 = first2->next;
    }
    if (sizeOfList(first1) != sizeOfList(first2)) {
        return false;
    }
    else {
        return true;
    }
}
 
 
int main()
{
 
 
    Node* first = constructNode(1);//Создаем первый узел
    pushBack(first, 2);// Добавляем узел в конец со значением 2
    pushBack(first, 3);// Добавляем узел в конец со значением 3
    cout << sizeOfList(first) << endl << sumOfList(first) << endl << maxOfList(first);// Выводим размер, сумму и максимальное значение через строку
    deleteList(first);// Удаляем список
}
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2024, 21:40
Ответы с готовыми решениями:

Ошибка компиляции Runtime error
Такой код: #include &lt;iostream&gt; #include &lt;ostream&gt; #include &lt;sstream&gt; #include &lt;string&gt; typedef std::string String; int...

Ошибка во время исполнения runtime-error
Добрый день. Программа компилируется на RAD Studio XE3. Нормально работает и показывает правильный результат. При отправке в проверочный...

Runtime Error
Пытаюсь создать игру 2048, но при выполнении движений вылетает Runtime Error void Game::doUp() { savedlist = celllist; ...

28
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
14.03.2024, 23:57
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Eto010 Посмотреть сообщение
Итоговый полностью рабочий код выглядит так:
Цитата Сообщение от Eto010 Посмотреть сообщение
Node(Node* next, int value) : next(next), value(value) {}
Бессмысленный конструктор. Зачем он было написан? Зачем руками писать конструктор, который полностью повторяет агрегатную инициализацию?

Цитата Сообщение от Eto010 Посмотреть сообщение
size_t sizeOfList(Node* first)
size_t - неподходящий и неуместный тип, ну да ладно... Но раз уж функция возвращает size_t, то почему тогда внутри этой функции подсчет делается в int cnt{};?

Цитата Сообщение от Eto010 Посмотреть сообщение
C++
1
2
3
4
5
6
void deleteList(Node* first) {// Удаляем список
    if (first) {
        deleteList(first->next);
        delete first;
    }
}
Непонятно, на основе какой логики выбиралось, какие функции делать рекурсивно, а какие циклически. Почему, например, sumOfList написана циклически, а deleteList - рекурсивно?

Цитата Сообщение от Eto010 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
bool compareLists(Node* first1, Node* first2) {
    ...
    if (sizeOfList(first1) != sizeOfList(first2)) {
        return false;
    }
    else {
        return true;
    }
Какая неэффективная дикость. Неужели не ясно, что вместо вызовов sizeOfList можно было просто написать

C++
1
return (first1 == nullptr) == (first2 == nullptr);
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.03.2024, 00:03
Цитата Сообщение от Eto010 Посмотреть сообщение
else {
        Node* pos = new Node(nullptr, value);
        first->next = pos;
    }
Это всё та же ошибка.
В этой ветке first = nullptr, и его нельзя разыменовывать.

Цитата Сообщение от Eto010 Посмотреть сообщение
оно неверное
Да.там опечатка просто.
C++
8
tmp = tmp->next;
В 8-ой строке.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
15.03.2024, 00:07
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это всё та же ошибка.
В этой ветке first = nullptr, и его нельзя разыменовывать.
В условии задачи гарантируется, что pushBack не будет вызываться с first = nullptr. Это - странная гарантия, но раз она дается, то она дается.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
15.03.2024, 00:14
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это всё та же ошибка.
Цитата Сообщение от Eto010 Посмотреть сообщение
if (first->next != nullptr)
Не заметил изменения, но здесь так же нельзя разыменовывать если в параметре функции pushBack попадет пустой список (nullptr).
Ну видимо вам видней. Удачи )

Добавлено через 27 секунд
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В условии задачи гарантируется, что pushBack не будет вызываться с first = nullptr. Это - странная гарантия, но раз она дается, то она дается.
Я не читал условия задачи

Добавлено через 2 минуты

Не по теме:

Eto010, такое ощущение что это задание по Си.



Добавлено через 2 минуты
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В условии задачи гарантируется, что pushBack не будет вызываться с first = nullptr. Это - странная гарантия,
Особенно учитывая что в другой функции уже могут
compareLists(Node* first1, Node* first2)- даются указатели на начала двух ForwardList,
необходимо вернуть true, если эти ForwardList совпадают по содержимому, и false иначе.
Два ForwardList равны, если у них одинаковый размер и одинаковые элементы с одним и
тем же порядком этих элементов. Любой из first1 и first2 может быть равен nullptr.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
15.03.2024, 00:17
Цитата Сообщение от SmallEvil Посмотреть сообщение
Особенно учитывая что в другой функции уже могут
Тот факт, что в каждом разделе зачем-то отдельно оговорено, допустим nullptr или нет, говорит о том, что это сделано именно намеренно. Где-то допустим, где-то нет. Логика разделения - странная, но это уже вопрос к авторам задачи.
0
 Аватар для Kuzia domovenok
4268 / 3328 / 926
Регистрация: 25.03.2012
Сообщений: 12,545
Записей в блоге: 1
15.03.2024, 11:04
Verevkin, func {
зависит от языка, насколько я знаю в PHP есть стандарт, по которому {скобки} после функции переносят на следующую строку
А после блочного statementа пишут через пробел в той же строке
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
17.03.2024, 11:19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Verevkin, func {
зависит от языка
Не только.
Например в С++ можно городить любые горы. Но если у человека в голове ворота, то ему не докажешь.
Google C++ Style Guide : Scoping

Я не говорю что это единственно правильный коде стайл.
Но он практичен, читаем и поширен (доказательство чего я только что привел).

p.s. Интересно было бы проанализировать коды на гитхабе, и посмотреть статистику по используемому кодестайлу )
0
0 / 0 / 0
Регистрация: 18.03.2024
Сообщений: 1
18.03.2024, 00:24
Это задача учебная, штудент должен поломать голову над структурой, вложенными указателями. Автор задачи своего вполне добивается.
А студент со своей стороны даже первую рекомендацию не соблюдает - не использовать
C++
1
using namespace std;
Так и не поймёт, что такое std.

ЗЫ: знаю автора задачи
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.03.2024, 13:42
Цитата Сообщение от vtriko Посмотреть сообщение
Это задача учебная, штудент должен поломать голову над структурой, вложенными указателями.
Это придется сделать в любом случае, на задачах по дереевьям и графам. На нормальных задачах.
Не говоря уже про разного рода индексирования.
А не эта Си-подобная нелогичная херь.

Цитата Сообщение от vtriko Посмотреть сообщение
знаю автора задачи
Как же вам повезло.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.03.2024, 13:42

Runtime Error
выдает runtime error на 18 тесте. код работал вполне себе нормально, но отправив на проверку я увидел вот это. можете взглянуть и...

runtime error
Входные данные двумерный массив 10х10, заполненный нолями и единицами, где 0-пустая клетка, а 1-занятая, найти наиболее длинную линию из...

Runtime Error
Доброго времени суток. Решал на первый взгляд простую задачу по перестановке чисел Необходимо переставить 2 числа так, чтобы все чётные...

Runtime error #3
#include &lt;iostream&gt; int main() { int a, b, c, page1, page2, hypot; std::cin &gt;&gt; a &gt;&gt; b &gt;&gt; c; if ((c &gt; a) &amp;&amp; (c &gt; b)) ...

Runtime Error
Доброго времени суток. Решал на первый взгляд простую задачу по распаковке строки. Если вкратце, то нужно строку вида 3A2BC...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru