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

Ошибка: terminate called after throwing an instance of 'std::bad_alloc'

03.04.2018, 09:38. Показов 3836. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток

В сурсе
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <sstream>
#include <string>
 
// определяем константные значения имен файлов
const std::string configFileName = "keys.cfg";
const std::string textFileName = "code.cd";
const std::string cryptoFileName = "crypto.cd";
 
/*
 * массив строк из 6 элементов
 */
std::array<std::string,6> allowedKey = {"1",
                                        "21",
                                        "2",
                                        "3",
                                        "2",
                    "n"};
 
/* какая -то функция
 * возвращает int
 * принимает строку как аргумент*/
int isAllowedKey(std::string key)
{
    /* цикл от 0 до 6*/
    for (int i = 0; i < allowedKey.size(); i++)
    {
        /* если iй элемент массива
         * allowedKey = ключу
         * вернем i*/
        if (allowedKey.at(i) == key)
            return i;
    }
    /* иначе вернем -1*/
    return -1;
}
 
 
std::vector<std::string> split(const std::string &s, char delim) {
    // перемещаем строку в поток
    std::stringstream ss(s);
    //создаем строку item
    std::string item;
    // создаем вектор строк elems
    std::vector<std::string> elems;
    // цикл пока не дойдем до символа delim
    while (std::getline(ss, item, delim)) {
        // вставляет элемент в конец вектора elems
        // т.е. строку в вектор строк
        elems.push_back(item);
    } //вернуть преобразованный обьект elems
    return elems;
}
 
// видимо функция ... чего?
void writeCrypto(const std::string& text)
{
    // открываем cryptoFilename
    std::ofstream file(cryptoFileName, std::ios::out);
    // видимо пишет текст в файл....
    file << text;
    // и закрывает его
    file.close();
}
 
// возвращает строку, принимает... большое ничего
std::string getKey()
{
    // парный вектор, 2 строки
    // "ключи"
    std::vector<std::pair<std::string, std::string>> keys;
 
    // два массива 1000 символов в каждом
    char readBuf1[1000];
    char readBuf2[1000];
 
    // чзапись в  файл??
    std::ifstream file(configFileName, std::ios::in);
 
    // пока не встретим нулевой символ
    while (!file.eof())
    {
        //
        file >> readBuf1;
        file >> readBuf2;
        keys.push_back(std::pair<std::string, std::string>{readBuf1, readBuf2});
    }
    file.close();
 
    std::string words="";
    for (int i = 0; i < keys.size(); i++)
    {
        std::vector<std::string> vec = split(keys[i].first, '_');
        if (isAllowedKey(vec.at(0))!=-1 && i < keys.size() - 1)
        {
            words.insert(words.length(),split(keys[i + 1].first, '_')[0]);
        }
        if (isAllowedKey(vec.at(0))==5)
        {
                    keys[i].second.insert(keys[i].second.length()-1,(words+keys[i].first));
            words=keys[i].second;
 
                        int length=words.length();
            int sum = 0;
            do {
                int tmp = length % 10;
                sum+= tmp;
            } while (length = length / 10);
            sum %= keys.size();
            words = keys[sum].second;
            break;
        }
    }
 
    return words;
}
std::string getText()
{
    std::ifstream file(textFileName);
 
    std::string str((std::istreambuf_iterator<char>(file)),
        std::istreambuf_iterator<char>());
 
 
    file.close();
    return str;// "this is text";
}
 
std::string getAlf()
{
    return  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.,!&- ";
}
 
std::string code(const std::string& alf, std::string key,const std::string& text)
{
    std::string crypto;
 
    int textLength = text.length();
    int keyLength = key.length();
    for (int i = keyLength; i < textLength; i++)
    {
        key += key[i%keyLength];
    }
 
    int ind1, ind2;
    int alfLength = alf.length();
    for (int i = 0; i<textLength; i++)
    {
        ind1 = alf.find(text[i]);
        ind2 = alf.find(key[i]);
        crypto.insert(i, 1, alf.at((ind1 + ind2) % alfLength));
    }
    return crypto;
}
 
int main()
{
    const std::string alf = getAlf();
    std::string key = getKey();
    if (key == "")
        return 0;
    std::string text = getText();
 
    std::string crypto = code(alf, key, text);
 
    writeCrypto(crypto);
 
    return 0;
}
На этапе работы при первом вводе вылетает оибка
C++
1
2
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Что это и от чего может быть? где я косячу. Вроде как проблема с выделением памяти, но не могу увидеть где.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.04.2018, 09:38
Ответы с готовыми решениями:

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc выделение памяти
Уважаемые форумчане! Работаю над программой обработки WAV файлов, но возникла такая проблема: при чтении файла возникает ошибка ...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
Есть задача: Написать программу, которая считывает текст из файла и выводит его на экран, заменив цифры от 0 до 9 на слова...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
Добрый день!Работаю с графами,и при больших значениях столкнулся с проблемой:ошибка в тесте программы на сайте такова: terminate called...

9
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
03.04.2018, 10:23
какого размера "code.cd"?
0
0 / 0 / 0
Регистрация: 31.03.2018
Сообщений: 11
03.04.2018, 10:46  [ТС]
GbaLog-, 1 кб. конфиг key тоже 1 кб
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
03.04.2018, 11:01
shwwown, Можете скинуть эти файлы с любыми фиктивными данными, но при которых этот баг бы воспроизводился ?
0
0 / 0 / 0
Регистрация: 31.03.2018
Сообщений: 11
03.04.2018, 11:21  [ТС]
admsasha, он при любых данных воспроизводится
ну вот сами файлы
Вложения
Тип файла: rar crypto.rar (407 байт, 6 просмотров)
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
03.04.2018, 11:26
С этими данными у меня ничего не падает, и программа завершается корректно
0
0 / 0 / 0
Регистрация: 31.03.2018
Сообщений: 11
03.04.2018, 12:01  [ТС]
admsasha, попробовал в онлайн компиляторе, та же история
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
03.04.2018, 13:27
В online компиляторе можно файл вставлять ? Скажите ссылку
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
03.04.2018, 14:13
у меня не падает, но дальше строки if (key == "") return 0; не доходит.
0
28 / 27 / 7
Регистрация: 11.06.2011
Сообщений: 387
03.04.2018, 14:16
GbaLog-, точно так же. Поэтому и прошу данные, на которых происходит падение. Весь код изучать на предмет возможных багов не хочется.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.04.2018, 14:16
Помогаю со студенческими работами здесь

Ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
При выполнении программы, которая миксует функции в которых создаются типовые задачи, вылезает ошибка, в чем проблема?? #include...

Ошибка terminate called after throwing an instance of 'std::bad_alloc' при работе с типом std::string
Добрый вечер, при работе функции возникает ошибка terminate called after throwing an instance of 'std::bad_alloc' what(): ...

Не понимаю из-за чего выскакивает: terminate called after throwing instance of std bad_alloc
Не понимаю из-за чего выскакивает ошибка при компиляции: terminate called after throwing instance of std bad_alloc. Буду благодарен, если...

Runtime ошибка - terminate called after throwing an instance of 'std::out_of_range'
Пишу что-то вроде компилятора. Так как никакой литературы по созданию компилятора не читал в моём коде появляються кучи Костылей и...

Ошибка при повторном запуске: terminate called after throwing an instance of 'std::ios_base::failure'
Здравствуйте, вот этот кусок кода(дан ниже) при повторном запуске программы выдает ошибку: terminate called after throwing an instance of...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru