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

Ошибка при соединении массивов

16.06.2021, 00:49. Показов 1415. Ответов 1

Студворк — интернет-сервис помощи студентам
Здравствуйте, ошибка возникает на строчке с вводом choice для switch-case, но как я понимаю, ошибка кроется в соединении двух массивов в цикле for(у многих на форумах это происходит из-за выхода за пределы массива, но у себя я выходов найти не смог). Ошибка "Необработанное исключение по адресу 0x77A56BB3 (ntdll.dll) в 13oop.1.exe: 0xC0000374: Куча была повреждена (параметры: 0x77A93960)".
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
103
104
105
106
107
#include <iostream>
using namespace std;
 
 
class kniga
{
public:
    char book[3][500] =
    {
        "Вирус\nПростейшая форма жизни, микроскопическая частица, представляющая собой молекулы нуклеиновых кислот (ДНК или РНК), заключенные в белковую оболочку (капсид) и способные инфицировать живые организмы. \n\n",
        "Бактерия\nСамые маленькие живые существа. Бактерия среднего размера, например, палочковидная кишечная палочка, нормальный обитатель кишечного тракта человека и животных — имеет длину около 2 микрометров\n\n",
        "Грибок\nМикроорганизмы, относящиеся к бесхлорофилльным низшим растениям — грибам, являющиеся факультативными или облигатными паразитами высших растений, рыб, рептилий, птиц и млекопитающих. \n\n"
    };
    int schetchik = 0;
    int stranica;
    char* max_zagolovok()
    {
        char* max_zagolovok = new char;
        setlocale(LC_ALL, "Russian");
 
        for (int i = 0; i < 3; i++)
        {
            for (int j = 0;book[i][j] != '\n' ; j++)
            {
                if (schetchik < j)
                {
                    schetchik = j;
                    stranica = i;
                }
            }
 
        }
        cout << "Максимальный размер заголовка: " << schetchik + 1 << endl;
        cout << "Страница с максимальным размером заголовка: " << stranica + 1 << endl;
        for (int j = 0; book[stranica][j] <= schetchik; j++)
        {
            max_zagolovok[j] = book[stranica][j];
        }
        max_zagolovok[schetchik + 1] = '\0';
        return max_zagolovok;
    }
 
 
    void paste(char* using_zagolovok)
    {
        setlocale(LC_ALL, "Russian");
        char out_page[10];
        for (int i = 0; i < strlen(using_zagolovok); i++)
        {
            out_page[i] = using_zagolovok[i];
        }
        out_page[strlen(using_zagolovok)] = '\0';
        cout << out_page << endl;
        cout << "\nВыберите, в какую страницу вы хотите вставить найденный заголовок: " << endl;
        cout << "Первая страница — 1" << endl;
        cout << "Вторая страница — 2" << endl;
        cout << "Третья страница — 3" << endl;
        int choice;
        cin >> choice;
        switch (choice)
        {
        case 1:
        {
            cout << "Вы выбрали первую страницу" << endl;
            for (int i = 0; book[0][i] != '\0'; i++)
            {
                out_page[i + strlen(using_zagolovok)] = book[0][i];
            }
            cout << out_page;
        }
        case 2:
        {
            cout << "Вы выбрали вторую страницу" << endl;
 
            for (int i = 0; book[1][i] != '\0'; i++)
            {
                out_page[i + strlen(using_zagolovok)] = book[1][i];
            }
            cout << out_page;
        }
        case 3:
        {
            cout << "Вы выбрали третью страницу" << endl;
 
            for (int i = 0; book[2][i] != '\0'; i++)
            {
                out_page[i + strlen(using_zagolovok)] = book[2][i];
            }
            cout << out_page;
        }
        default:
        {
            cout << "Вы ввели неверное число" << endl;
        }
        }
    }
};
 
int main()
{
    char* zagolovok = new char;
    setlocale(LC_ALL, "Russian");
    kniga vivod;
    zagolovok = vivod.max_zagolovok();
    cout << "Самый длинный заголовок: " << zagolovok << endl;
    vivod.paste(zagolovok);
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2021, 00:49
Ответы с готовыми решениями:

При введении 2 массивов ошибка
#include&lt;iostream&gt; #include&lt;windows.h&gt; #include&lt;ctime&gt; using namespace std; void input(int**,int,int); int main(){ ...

Ошибка при удалении динамических массивов
#include &lt;iostream&gt; int main() { setlocale(LC_ALL, &quot;rus&quot;); int m, a, c, x0, x_minus, size = 0; std::cout &lt;&lt; &quot;Вас приветствует...

Надо передать серверу идентификатор клиента при соединении
Друзья! То есть я хочу проделать сие. У меня запускается на одной машине сервер и два клиента и я хочу чтобы сервер различал: соединение с...

1
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
16.06.2021, 02:23
Лучший ответ Сообщение было отмечено Bacchus как решение

Решение

Цитата Сообщение от Bacchus Посмотреть сообщение
char* max_zagolovok = new char;
//...
max_zagolovok[schetchik + 1] = '\0';
Угу, ты не выйдешь за пределы массива, если массива не будет... Создавать нужно перед циклом с копированием и массив, а не один символ:
char* max_zagolovok = new char[schetchik + 1];
Также фигурные скобок у каджого case'а не избавляют вас от необходимости ставить break в конце каждого из них.
Делать new char в main'е бессмысленно, вы всё равно затираете указатель полученным из функции и таким образом получаете утечку памяти.
Ну и сделать delete[] zagolovok в конце было бы неплохо.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2021, 02:23
Помогаю со студенческими работами здесь

Ошибка при соединении сигнала одного класса со слотом другого класса
Доброго дня! Подскажите новичку: В одном классе, названном class Calibration инициализирована кнопка (start_pushButton), при нажатии на...

Исключение при соединении к серверу
Добрый день. Начал писать приложение-клиент, использующее TClientSocket. Приложением-сервером является уже отлаженная программа. Но...

Ошибка при объявлении слишком больших массивов
при объявлении массива float j; во время выполнения ошибка segmentation fault

Ошибка при соединении с БД
Всем привет! Столкнулся с проблемой при попытке соединения к файлу БД. var fDB,provider,ds,psi,connection,isam: string; begin if...

Ошибка при соединении
Как решить ошибку


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru