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

.exe has a triggered a breakpoint

12.08.2020, 21:35. Показов 1536. Ответов 10

Студворк — интернет-сервис помощи студентам
Вкратце, консольное приложение "Библиотека" не хочет удаляться читатель, недавно проверял - работало, сейчас не хочет.
Динамический массив с читателями, имеют ID и удаляются по нему же.

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
void delete_readers(About_Of_Readers*& List_of_readers, int& number_of_readers) { //Delete readers in Library
    system("cls");
    About_Of_Readers* tmp = new About_Of_Readers[number_of_readers - 1];
    cout << "Enter ID of Reader, that you want delete\n";
    int Id_delete;
    cin >> Id_delete;
    for (int i = 0; i < number_of_readers; i++)
    {
        if (Id_delete == List_of_readers[i].ID_readers)
            continue;
        strcpy(tmp[i].name, List_of_readers[i].name);
        strcpy(tmp[i].surname, List_of_readers[i].surname);
        strcpy(tmp[i].patronymic, List_of_readers[i].patronymic);
        tmp[i].data_of_birth.data = List_of_readers[i].data_of_birth.data;
        tmp[i].data_of_birth.mounth = List_of_readers[i].data_of_birth.mounth;
        tmp[i].data_of_birth.year = List_of_readers[i].data_of_birth.year;
        for (int j = 0; j < a; j++)
        {
            tmp[i].list_book_in_readers[j] = List_of_readers[i].list_book_in_readers[j];
        }
        tmp[i].Pasport_number = List_of_readers[i].Pasport_number;
        tmp[i].ID_readers = List_of_readers[i].ID_readers;
        tmp[i].number_of_books_read = List_of_readers[i].number_of_books_read;
    }
 
    delete[]List_of_readers;// тут тригерит точку остановки
    List_of_readers = tmp;
    number_of_readers--;
 
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2020, 21:35
Ответы с готовыми решениями:

Ошибка .exe has triggered a breakpoint
вылетает, когда делаю delete, если delete стоит перед strcpy, то всё норм #include&lt;iostream&gt; void Perevod(char*,int...

Stalin.exe has triggered a breakpoint
Здравствуйте! У меня возникла проблема, по которой я не могу найти решения в интернете. Собственно, после введения любой строки в...

App.exe has triggered a breakpoint
Здравствуйте. Я пытаюсь создать класс Management для управления студентами. Реализую функцию добавления нового студента в список, но...

10
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,688
12.08.2020, 22:05
что такое а в строке 17?
0
0 / 0 / 0
Регистрация: 20.03.2020
Сообщений: 61
12.08.2020, 22:09  [ТС]
Это максимальное число книг на человека

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const int a = 10; // see struct About_of_Readers 
 
struct Data_of_issue
{
    int data;
    int mounth;
    int year;
};
 
struct About_Of_Readers {
    char name[50];
    char surname[50];
    char patronymic[50];
    Data_of_issue data_of_birth;  //look struct Data_of_issue
    int Pasport_number;
    int ID_readers;
    int number_of_books_read;
    int list_book_in_readers[a] = { 0 };
    //SYSTEMTIME DAY_getBook;
};
0
 Аватар для Annemesski
2673 / 1335 / 480
Регистрация: 08.11.2016
Сообщений: 3,688
12.08.2020, 22:35
Попробуйте выполнить clean и rebuild.

Особой крамолы вроде нет, но все же Вы, пользуясь таким методом удаления, должны гарантировать что в массиве читателей есть читатель с идентификатором который вы запрашиваете для удаления. По хорошему сперва надо выполнить поиск по id читателя и если такой в массиве есть, тогда уж и выделять новую память и копировать старый список в новый с пропуском, если такого читателя нет, выходить из функции не выделяя память и не модифицируя массив и переменную счетчик читателей.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
12.08.2020, 22:52
Цитата Сообщение от Selveresta Посмотреть сообщение
недавно проверял - работало, сейчас не хочет.
Как это могло работать?

Вы выделяете массив размера number_of_readers - 1

C++
1
About_Of_Readers* tmp = new About_Of_Readers[number_of_readers - 1];
после чего записываете в него данные по индексам от 0 до number_of_readers - 1.

C++
1
2
3
4
    for (int i = 0; i < number_of_readers; i++)
    {
        ...
        strcpy(tmp[i].name, List_of_readers[i].name);
Получается вылет за пределы массива. Чего ж вы ожидали?

Распространенные ошибки
0
0 / 0 / 0
Регистрация: 20.03.2020
Сообщений: 61
12.08.2020, 23:08  [ТС]
У меня в самом начале цикла есть проверка по ID, ты вводишь тот которого хочешь удалить и если такой есть то иттерация цикла пропускается.

C++
1
2
  if (Id_delete == List_of_readers[i].ID_readers)
            continue;
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
12.08.2020, 23:15
Цитата Сообщение от Selveresta Посмотреть сообщение
и если такой есть то иттерация цикла пропускается
И что? Итерация-то может и пропускается, но значение i в цикле все равно продолжает увеличиваться как и прежде, и в конце концов достигает number_of_readers - 1, т.е. вылетает за пределы массива.

Поэтому при чем здесь "иттерация цикла пропускается" мне не ясно.
0
0 / 0 / 0
Регистрация: 20.03.2020
Сообщений: 61
12.08.2020, 23:16  [ТС]
Я подумал что вместо проверки всех по ID, лучше найти одного, того которого нужно удалить.
Можете по подробней розказать про clean and rebuild, а что не слышал про такое
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
12.08.2020, 23:18
Цитата Сообщение от Selveresta Посмотреть сообщение
Можете по подробней розказать про clean and rebuild, а что не слышал про такое
Никакой "clean and rebuild" здесь не поможет, пока не будет исправлена вышеуказанная грубая ошибка.
0
0 / 0 / 0
Регистрация: 20.03.2020
Сообщений: 61
12.08.2020, 23:24  [ТС]
Если я поставлю количество в цикле на один меньше, тогда один читатель не попадёт под копирование.
Но и в ваших словах я вижу логику, так что я сейчас запутался
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12937 / 6804 / 1821
Регистрация: 18.10.2014
Сообщений: 17,218
12.08.2020, 23:28
Лучший ответ Сообщение было отмечено Selveresta как решение

Решение

Цитата Сообщение от Selveresta Посмотреть сообщение
Если я поставлю количество в цикле на один меньше, тогда один читатель не попадёт под копирование.
Совершенно верно. Это вам подсказывает, что пытаться осуществлять доступ к обоим массивам по одному и тому же индексу i - совершенно бесперспективное занятие. Так не получится.

Одним из вариантов правильной реализации будет использование двух индексов: один для чтения List_of_readers[i], другой для записи tmp[j].
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2020, 23:28
Помогаю со студенческими работами здесь

HoughTransformV4.exe has triggered a breakpoint
Помогите=) стоит только попытаться применить любую операцию округления выдает такое сообщение: HoughTransformV4.exe has triggered a...

Test.exe has triggered a breakpoint ошибка
Ошибка выполнения программы. Вроде ошибка при освобождении free(massZ). #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

.exe has triggered a breakpoint (умножение матриц)
Класс матриц. Выдает такую ошибку при попытке вызвать функцию умножения: CMatrix operator*(CMatrix &amp;leftMatrix, CMatrix...

Выдает ошибку Project_name.exe has triggered a breakpoint
При выводе результатов в конце программа выдает &quot;Project_name.exe has triggered a breakpoint.&quot; и открывается debug. Помогите пожалуйста...

Компилятор выдает ошибку app.exe has triggered a breakpoint
Парни C++ только начал изучать как пол года назад. Ссори если не правильно высказываюсь. Делаю задачку. Не могу врубиться почему...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru