Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 59
1

Ошибка исполнения "vector subscript out of range / debug assertion failed"

03.06.2018, 15:59. Показов 2769. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.. Помогите исправить ошибку..
Вот код:

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
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#include <iostream>
#include <vector>
#include <fstream>
 
using namespace std;
void InputGraph(ifstream&, int**&, int&, int&, int&);
int  FindMaxFlow(int**, int**&, int, int, int);
bool CheckIfBalanced(int**, int, int, int);
void CheckIfFull(int**, int**, int, int, int);
 
 
bool IS_FULL = false;
 
 
void main()
{
    int** graph;
    int** graphCurrentFlow;
    int startVertex;
    int finishVertex;
    ifstream in;
    in.open("graph_2.txt");
    int N = 0;
    InputGraph(in, graph, N, startVertex, finishVertex);
    graphCurrentFlow = new int*[N];
    for (int i = 0; i < N; i++)
    {
        graphCurrentFlow[i] = new int[N];
        for (int j = 0; j < N; j++)
            graphCurrentFlow[i][j] = 0; //allocating memory and nulling array of current thread
    }
 
    int maxFlow = FindMaxFlow(graph, graphCurrentFlow, N, startVertex, finishVertex);
    bool isBalanced = CheckIfBalanced(graphCurrentFlow, N, startVertex, finishVertex);
 
    for (int i = 0; i < N; i++)
    {
        cout << endl;
        for (int j = 0; j < N; j++)
        {
            cout << graph[i][j] << "  ";
        }
    }
 
 
    cout << endl;
    if (isBalanced)
    {
        cout << "is Balanced " << endl;
        cout << "Max flow is: " << maxFlow << endl;
    }
    else
    {
        cout << "Something went wrong" << endl;
 
    }
 
    system("pause");
}
 
void InputGraph(ifstream& in, int**& graph, int& N, int&start, int& finish)
{
    int Nedges;
    in >> N >> Nedges >> start >> finish;
    graph = new int*[N];
    for (int i = 0; i < N; i++)
    {
        graph[i] = new int[N];
        for (int j = 0; j < N; j++)
            graph[i][j] = 0;
    }
    for (int k = 0; k < Nedges; k++)
    {
        int temp_i, temp_j;
        in >> temp_i >> temp_j;
        in >> graph[temp_i - 1][temp_j - 1];
 
    }
}
 
void fillPath(int**graph, int **& flow, int N, vector<int> path)
{
    int len = path.size() - 1;
    int min = graph[path[0] - 1][path[1] - 1] - flow[path[0] - 1][path[1] - 1];
    for (int i = 1; i < len; i++)
    {
        int temp = graph[path[i] - 1][path[i + 1] - 1] - flow[path[i] - 1][path[i + 1] - 1];
        if (temp < min)
            min = temp;
    }
    for (int i = 0; i < len; i++)
    {
        flow[path[i] - 1][path[i + 1] - 1] += min;
    }
 
}
 
void findPath(int**graph, int **& flow, int N, int start, int finish, vector<int> path)
{
    path.push_back(start);
 
    if (start == finish)
    {
        //place here for filling path
        fillPath(graph, flow, N, path);
        CheckIfFull(graph, flow, N, start, finish);
 
        cout << endl;
        for (int j = 0; j < path.size(); j++)
        {
            cout << path[j] << " ";
        }
        //system("pause");
        return;
        //return true;
    }
    //for (int i = N - 1; i >= 0; i--)
    for (int i = 0; i < N; i++)
    {
        if (IS_FULL)
            break;
        if (graph[start - 1][i] == 0)
            continue;
        //search if there is same vertex in path
        bool isSame = false;
        for (int j = 0; j< path.size();j++)
            if (i + 1 == path[j])
            {
                isSame = true;
                break;
            }
        if (!isSame)
        {
            findPath(graph, flow, N, i + 1, finish, path);
        }
    }
}
 
int CountMaxFlow(int**flow, int N, int finish)
{
    int sum = 0;
    for (int i = 0; i < N; i++)
    {
        sum += flow[i][finish - 1];
    }
    return sum;
}
 
void RefillPath(int**graph, int **& flow, int N, vector<int> path, vector<bool>direction)
{
    int len = path.size() - 1;
    int min = graph[path[0] - 1][path[1] - 1] - flow[path[0] - 1][path[1] - 1];
    for (int i = 1; i < len; i++)
    {
        int temp;
        if (direction[i + 1])
            temp = graph[path[i] - 1][path[i + 1] - 1] - flow[path[i] - 1][path[i + 1] - 1];
        else
            temp = /*graph[path[i + 1] - 1][path[i] - 1] - */flow[path[i + 1] - 1][path[i] - 1];//reverced
        if (temp < min)
            min = temp;
    }
    for (int i = 0; i < len; i++)
    {
        if (direction[i + 1])
            flow[path[i] - 1][path[i + 1] - 1] += min;
        else
            flow[path[i + 1] - 1][path[i] - 1] -= min; // reverced
    }
 
}
 
void FlowRedistribution(int**graph, int **& flow, int N, int start, int finish, vector<int> path, vector<bool>direction, bool currentDirection)
{
    path.push_back(start);
    direction.push_back(currentDirection);
 
 
    if (start == finish)
    {
        //place here for filling path
        RefillPath(graph, flow, N, path, direction);
        CheckIfFull(graph, flow, N, start, finish);
        //test
 
        cout << "redistributed path: ";
        for (int j = 0; j < path.size(); j++)
        {
            cout << path[j] << " ";
        }
        cout << endl;
        return;
        //return true;
    }
    //for (int i =N-1;i>=0;i--)
    for (int i = 0; i < N; i++)
    {
        if (IS_FULL)
            break;
        if ((graph[start - 1][i] == 0) && (graph[i][start - 1] == 0))//if there is no such edge
        {
 
            continue;
        }
        else if ((graph[start - 1][i] - flow[start - 1][i] == 0) && (flow[i][start - 1] == 0))//if our edge is full and if reverse edge is not empty
        {
 
            continue;
        }
 
        //search if there is same vertex in path
        bool isSame = false;
        for (int j = 0; j< path.size(); j++)
            if (i + 1 == path[j])
            {
 
                isSame = true;
                break;
            }
 
        if (!isSame)
        {
            if (graph[start - 1][i] != 0)
                FlowRedistribution(graph, flow, N, i + 1, finish, path, direction, true);
            if (graph[i][start - 1] != 0)
                FlowRedistribution(graph, flow, N, i + 1, finish, path, direction, false);
        }
    }
}
 
int FindMaxFlow(int**graph, int**& flow, int N, int start, int finish)
{
 
    vector<int> path(0);
    findPath(graph, flow, N, start, finish, path);
    cout << endl << "Flow matrix(before redistribution)" << endl;
    for (int i = 0; i < N; i++)
    {
        cout << endl;
        for (int j = 0; j < N; j++)
        {
            cout << flow[i][j] << "  ";
        }
    }
    cout << endl;
    vector<bool> direction(0);
    FlowRedistribution(graph, flow, N, start, finish, path, direction, true);
    cout << endl << "Flow matrix:" << endl;
    for (int i = 0; i < N; i++)
    {
        cout << endl;
        for (int j = 0; j < N; j++)
        {
            cout << flow[i][j] << "  ";
        }
    }
    cout << endl;
 
    return CountMaxFlow(flow, N, finish);
 
}
 
bool CheckIfBalanced(int**flow, int N, int start, int finish)
{
    for (int i = 0; i < N; i++)
    {
        if ((i == start - 1) || (i == finish - 1))
            continue;
        int sum = 0;
        for (int j = 0; j < N; j++)
        {
            sum += (flow[i][j] - flow[j][i]);
        }
        if (sum != 0)
            return false;
    }
    return true;
}
 
void CheckIfFull(int**graph, int**flow, int N, int start, int finish)
{
    for (int i = 0; i < N; i++)
    {
        int temp_start = graph[start - 1][i] - flow[start - 1][i];
        int temp_finist = graph[i][finish - 1] - flow[finish - 1][i];
        if (temp_start != 0 || temp_finist != 0)
            return;
    }
    IS_FULL = true;
 
}
[img]https://i.**********/KMrVdiI.png[/img]
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.06.2018, 15:59
Ответы с готовыми решениями:

Debug assertion failed : string subscript out of range
Доброе время суток, просьба более опытных форумчан помочь с проблемой. Работал в MVS 2010 на XP,...

Debug Assertion Failed! Expression: string subscript out of range
Вот сегодня трудился целый день над игрой, и дошёл до момента когда начала появлятся выше...

Программа завершает работу с ошибкой "debug assertion failed" и "vector subscript out of range"
#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; void main() { int k, n, w, a;...

Ошибка "string subscript out of range" (debug assertion failure)
Добрый день! Есть простая функция типа string, которая берёт на вход произвольную С-строку (char...

4
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
03.06.2018, 16:16 2
Цитата Сообщение от EnvyChild Посмотреть сообщение
void findPath(int**graph, int **& flow, int N, int start, int finish, vector<int> path) {
Цитата Сообщение от EnvyChild Посмотреть сообщение
void FlowRedistribution(int**graph, int **& flow, int N, int start, int finish, vector<int> path, vector<bool>direction, bool currentDirection)
Вы передаете вектор по значению, соответственно все изменения не будут отражены в фактическом параметре после вызова этих функций.
Замените везде на передачу по ссылке.
0
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 59
03.06.2018, 17:03  [ТС] 3
Все равно выдает ту же ошибку ..( или я что то не правильно понял

Добавлено через 7 минут
Ошибка указывает именно на эту область
C++
1
int min = graph[path[0] - 1][path[1] - 1] - flow[path[0] - 1][path[1] - 1];
которая находиться в
C++
1
void fillPath(int**graph, int **& flow, int N, vector<int> path)
0
Модератор
Эксперт С++
 Аватар для zss
13727 / 10923 / 6480
Регистрация: 18.12.2011
Сообщений: 29,157
03.06.2018, 17:06 4
Я же писал - Везде заменить
vector<int> на vector<int>&
vector<bool> на vector<bool>&
C++
1
void fillPath(int**graph, int **& flow, int N, vector<int>& path)
C++
1
void findPath(int**graph, int **& flow, int N, int start, int finish, vector<int>& path)
C++
1
void RefillPath(int**graph, int **& flow, int N, vector<int>& path, vector<bool>& direction)
C++
1
void FlowRedistribution(int**graph, int **& flow, int N, int start, int finish, vector<int>& path, vector<bool>& direction, bool currentDirection)
0
0 / 0 / 0
Регистрация: 28.11.2017
Сообщений: 59
03.06.2018, 18:39  [ТС] 5
Все, спасибо огромное, проблему решил))
Оказалось все куда проще и глупее.. Прочитал на другом форуме что такая ошибка может быть из за отсутствия файла.. улыбнулся.. посмеялся и пошел дальше искать ришение.. оказалось что я не в ту папку закинул текстовые файлы))
0
03.06.2018, 18:39
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.06.2018, 18:39
Помогаю со студенческими работами здесь

debug assertion failed with vector
Добрый день, имеется такой упрощенный код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

ошибка debug assertion failed
при выполнении программы происходит ошибка debug assertion failed, а именно попытке завершить...

Ошибка: Debug assertion failed
Всем привет, столкнулся с ошибкой, помогите определить ошибку? Ошибка: Условия задачи:...

Ошибка Debug Assertion Failed
Доброго времени суток, срочно нужна помощь, такая проблема: есть программа шифрования методом...

ошибка debug assertion failed
здравствуйте. помогите, пожалуйстра, разобраться, из-за чего при запуске exe выдаётся ошибка debug...

Ошибка компиляции (Debug Assertion Failed)
Ребят помоги, что не так в этом коде? Выдает вот эту ошибку...

Ошибка в коде Debug Assertion Failed!
Всем привет, помогите разобраться с ошибкой в коде. Если пользователь введет только флаг --calc...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
Алгоритмика
hw_wired 28.01.2025
Введение: Основы алгоритмики и её роль в информатике В современном мире программирование и алгоритмическое мышление стали неотъемлемой частью образования и профессиональной деятельности. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru