Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/34: Рейтинг темы: голосов - 34, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 21.01.2024
Сообщений: 2

Ошибка: abort() has been called

21.01.2024, 21:07. Показов 8130. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть вот такой вот код, который должен искать количество символом в текстовом файле.

Вылетает ошибка при компиляции,
также завершает с вот таким вот кодом: завершил работу с кодом -2147483645.

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
#include <iostream>
#include <fstream>
using namespace std;
int much;
void find(const char simbol, string inside) {
    for (int i = 0; i <= inside.size(); i++) {
        if (inside.at(i) == simbol)
        {
            much = much + 1;
        }
    }
}
int main()
{
    string way;
    string file;
    char sy;
    cout << "Write way to file ";
    cin >> way;
    ifstream myfile(way);
    if (myfile.is_open()) {
        cout << "file has opened";
    }
    else cout << "file hasnt opened";
    cout << "\n\n";
    cout << "Choose symbol to find ";
    cin >> sy;
    while (!myfile.eof()) {
        char c;
        myfile >> c;
        file = file + c;
    }
    find(sy, file);
    cout << '\n';
    cout << sy << " has finded for " << much << " times";
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2024, 21:07
Ответы с готовыми решениями:

Abort() has been called - Ошибка в работе программы
Только начал изучать C++. Нужно немного помощи. Задача такова, ввести текст(строку), отсортировать слова в порядке увеличения их длины и...

Abort() has been called. Почему?
Есть такой код. Я изменяю размер массива на каждой итерации 10i, i=. У меня всё отрабатывает с 0 по 8, но на 9 итерации выдаёт ошибку...

Abort has been called с векторами
#include &lt;iostream&gt; #include&lt;vector&gt; #include &lt;algorithm&gt; int main() { int n; int m; int aso = 0;

6
20 / 12 / 8
Регистрация: 30.10.2023
Сообщений: 32
21.01.2024, 21:37
C++
1
for (int i = 0; i <= inside.size(); i++) {
В этой строчке вас должно что-то засмущать. Чисел от 0 до inside.size() существует inside.size() + 1. А символов в строке всего inside.size(). Что-то здесь не сходится . Вы обращаетсь к символу за пределами строки, если берете inside.at(inside.size()). Вот программа и валится.
0
фрилансер
 Аватар для Алексей1153
6466 / 5680 / 1131
Регистрация: 11.10.2019
Сообщений: 15,126
21.01.2024, 21:52
Цитата Сообщение от kverg Посмотреть сообщение
else cout << "file hasnt opened";
Цитата Сообщение от kverg Посмотреть сообщение
while (!myfile.eof()) {
тут тоже есть, чему засмущать
1
 Аватар для Tanya2007
593 / 230 / 72
Регистрация: 13.05.2020
Сообщений: 412
21.01.2024, 22:27
Цитата Сообщение от kverg Посмотреть сообщение
C++
1
for (int i = 0; i <= inside.size(); i++)
Выход за границы массива, идти надо до
C++
1
i < inside.size();

Цитата Сообщение от kverg Посмотреть сообщение
C++
1
2
3
4
5
while (!myfile.eof()) {
char c;
myfile >> c;
file = file + c;
}
Эта конструкция не верна.

правильней будет так:
C++
1
2
3
4
5
char c;
while (myfile >> c) 
{
file += c;
}
+ если в вашем файле есть пробелы - оператор извлечения (>>) прочитает лишь до первого пробела, в таком случае лучше будет использовать функцию get().

Добавлено через 26 минут
C++
1
2
3
4
5
while (!myfile.eof()) {
char c;
myfile >> c;
file = file + c;
}
поясню почему не верна, вы читаете посимвольно, представим, что последний символ файла прочитан, указатель чтения файла установлен за последним символом, т.е. флаг eofbit потока еще не установлен, а значит на следующей итерации цикла !myfile.eof() вернет вам true. И в теле цикла, при очередном чтении из потока myfile >> c;, поток установится в eofbit, а в с останется мусор, который запишется в file.
2
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13180 / 6816 / 1821
Регистрация: 18.10.2014
Сообщений: 17,253
22.01.2024, 02:38
Цитата Сообщение от kverg Посмотреть сообщение
Вылетает ошибка при компиляции,
Где вы процитировали эту ошибку в своем вопросе?

Цитата Сообщение от kverg Посмотреть сообщение
также завершает с вот таким вот кодом: завершил работу с кодом -2147483645.
Не понял. Кто "завершил работу"?
0
27 / 24 / 4
Регистрация: 20.11.2023
Сообщений: 131
22.01.2024, 19:56
kverg, проблемы вашего кода настолько просты и банальны, что Вам лучше разобраться в них самостоятельно, я
лишь укажу, что может помочь.
1. Чисто архитектурные проблемы. (на работу кода не влияют, но очееень важны, например, на собеседовании)
Вместо того, чтобы просто взять и вернуть значение из функции find Вы зачем-то заводите глобальную переменную much и записываете в нее результат. Не говоря уже о том, что от использования глобальных/статических переменных лучше по возможности воздерживаться, при многократном использовании этой функции Вам придется обнулять эту переменную.
Путь до файла называется не "way" а "path".
От using namespace std лучше отказаться.
2. Выход за границы строки (замечание Tanya2007).
Как вы знаете, индексация массивов начинается с 0. std::string - тоже не исключение.
Следовательно, индексы объекта std::string размером n, таковы: 0..n-1.
А итерация до n включительно (<= n) вызовет данное поведение.
Остальное было подмечено Tanya2007.
3
0 / 0 / 0
Регистрация: 21.01.2024
Сообщений: 2
22.01.2024, 23:10  [ТС]
Всем спасибо за помощь, в следующий раз буду внимательней, учту пробелы в английском и донесении своей мысли до собеседника, ещё раз спасибо!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.01.2024, 23:10
Помогаю со студенческими работами здесь

R6010 -abort() has been called
Есть код: task_for_thread: void task_for_thread(const size_t idThread) { while (done.value == 1) {} // пусть крутятся тут...

Вылетает : R6010 - abort() has been called
Написал программу которая перемножает 2 очень больших матрицы. На мелких она работает. То есть 10000 на 10000 умножает без проблем. ...

Проблема чтения файла С++ abort() has been called
Здравствуйте. Ранее без проблем считывал данные с файлов в С++, а вчера появилась проблема. Попробовал скомпилировать небольшой код, узнать...

Abort has been called при создании потока
С помощью CreateRemoteThread запускаю новый поток, в котором примерно следующее: _mainLoop = std::thread(() { for (;;) { ...

Debug Error! R6010 - abort() has been called
Помогите исправить ошибку #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(int argc, char * argv) { ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru