С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
1

Компилятор выдает ошибки (Решение 1.exe has triggered a breakpoint)

26.05.2015, 11:07. Просмотров 1013. Ответов 12
Метки нет (Все метки)

и еще эта ошибка: "Unhandled exception at 0x770E5624 (ntdll.dll) in Решение 1.exe: 0xC0000374: Куча была повреждена (parameters: 0x77101378)"

в файле horse.in числа: 3 3 1 1 1 1 3 3

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
#pragma warning(disable: 4996)
#include <iostream>
#include <vector>
#include <stdio.h>
#include <algorithm>
#include <cstdlib>
using namespace std;
 
 
int main()
{
    int M, N, p, q, x1, y1, x2, y2;
    //int M=3, N=3, p=1, q=1, x1=1, y1=1, x2=3, y2=3;
    //cin >> M >> N >> p >> q >> x1 >> y1 >> x2 >> y2;
    freopen("horse.in", "r", stdin);
    cin >> M >> N >> p >> q >> x1 >> y1 >> x2 >> y2;
    int **mas = new int*[M];
    for (int i = 1; i <= M; i++)
        mas[i] = new int[N];
 
    for (int i = 1; i <= M; i++) // ввод 
    {
        for (int j = 1; j <= N; j++)
        {
            mas[i][j] = 0;
        }
    }
    
    fclose(stdin);
    int **FIFO = new int *[2];
 
    for (int i = 0; i < M*M; i++)
    {
        FIFO[i] = new int[1];
    }
 
    FIFO[0][0] = x1;
    FIFO[1][0] = y1;
    FIFO[2][0] = -1;
    mas[x1][y1] = 1;
 
    int xt, yt, pr;
    int xs, ys;
    int In_S = 0, In_E = 0;
    while (In_S <= In_E && mas[x2][y2] == 0)
    {
        pr = In_S;
        xt = FIFO[0][In_S];
        yt = FIFO[1][In_S++];
        
        //1
        xs = xt + p; ys = yt - q;
        if (xs > 0 && ys > 0 && M-xs>= 0 && N-ys>= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //2
        xs = xt + p; ys = yt + q;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //3
        xs = xt + q; ys = yt - p;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //4
        xs = xt + q; ys = yt + p;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //5
        xs = xt - p; ys = yt - q;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //6
        xs = xt - p; ys = yt + q;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //7
        xs = xt - q; ys = yt - p;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
        //8
        xs = xt - q; ys = yt + p;
        if (xs > 0 && ys > 0 && M - xs >= 0 && N - ys >= 0)
        {
            if (mas[xs][ys] == 0)
            {
                mas[xs][ys] = mas[xt][yt] + 1;
                FIFO[0][++In_E] = xs;
                FIFO[1][In_E] = ys;
                FIFO[2][In_E] = pr;
            }
        }
    }
 
    freopen("horse.out", "w", stdout);
    if (mas[x2][y2] == 0)
        cout << -1 << endl;
    else
    {
        cout << mas[xs][ys]-1 << endl;
    
        int rez [1][1000];
 
        rez[0][0] = x2;
        rez[1][0] = y2;
 
        int i=0, it = FIFO[2][In_E];
 
        while (FIFO[2][it] !=-1)
        {
            rez[0][++i] = FIFO[0][it];
            rez[1][i] = FIFO[1][it];
            it = FIFO[2][it];
        }
 
        rez[0][++i] = x1;
        rez[1][i] = y1;
 
        for (int k = i; k >= 0; k--)
        {
            cout << rez[0][k] << " " << rez[1][k] << endl;
        }
    }
    fclose(stdout);
    //return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2015, 11:07
Ответы с готовыми решениями:

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

Ошибка .exe has triggered a breakpoint
вылетает, когда делаю delete, если delete стоит перед strcpy, то всё норм ...

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

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

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

12
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
26.05.2015, 11:17 2
Цитата Сообщение от egorikftp Посмотреть сообщение
for (int i = 1; i <= M; i++)
* * * * mas[i] = new int[N];
for (int i = 1; i <= M; i++) // ввод
* * {
* * * * for (int j = 1; j <= N; j++)
* * * * {
* * * * * * mas[i][j] = 0;
* * * * }
* * }
В параметрах for() просто <, а не <=, иначе получается выход за границу выделенной памяти.

Добавлено через 5 минут
Цитата Сообщение от egorikftp Посмотреть сообщение
FIFO[2][0] = -1;
Тут тоже выход за границу.
Цитата Сообщение от egorikftp Посмотреть сообщение
for (int i = 0; i < M*M; i++)
* * {
* * * * FIFO[i] = new int[1];
* * }
Тут, скорее всего, тоже.
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 08:54  [ТС] 3
после исправления стало вываливаться на других ошибках
бред какой-то
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
28.05.2015, 08:58 4
Цитата Сообщение от egorikftp Посмотреть сообщение
после исправления стало вываливаться на других ошибках
бред какой-то
Бывает, значит это не единственные ошибки.

Добавлено через 40 секунд
Какой код? Какие ошибки?
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 09:07  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
int **mas = new int*[M];
    for (int i = 1; i < M; i++)
        mas[i] = new int[N];
 
    for (int i = 1; i < M; i++) // ввод 
    {
        for (int j = 1; j < N; j++)
        {
            mas[i][j] = 0;
        }
    }
в этом коде, когда поменял границы вылетает на ошибке: Unhandled exception at 0x00FA6230 in Решение 1.exe: 0xC0000005: Access violation reading location 0xFDFDFE09.

и ругается на строку:
C++
1
while (In_S <= In_E && mas[x2][y2] == 0)
0
lss
930 / 859 / 355
Регистрация: 10.10.2012
Сообщений: 2,705
28.05.2015, 09:10 6
Цитата Сообщение от egorikftp Посмотреть сообщение
в этом коде, когда поменял границы
А в других местах? Почему индексы массивов у тебя с единицы начинаются?
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 09:30  [ТС] 7
Добавлено через 1 минуту
Цитата Сообщение от lss Посмотреть сообщение
А в других местах? Почему индексы массивов у тебя с единицы начинаются?

Вначале сама матрица mas это как шахматная доска размера M*N
а FIFO как стек, в котором пишутся вершины, в которых были


условие скинуть может?
0
zss
Модератор
Эксперт С++
7485 / 6852 / 4326
Регистрация: 18.12.2011
Сообщений: 18,136
Завершенные тесты: 1
28.05.2015, 09:58 8
Индексы в массивах начинаются с нуля и заканчиваются, соответственно N-1.
И не забывайте удалять выделенную память:
C++
1
2
3
for (int i = 0; i < M; i++)
        delete[] mas[i];
delete[] mas;
Массив FIFO у Вас имеет размер FIFO[2][1]. Т.е. 2 строки с номерами от 0 до 1 и один столбец с номером 0.
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 10:24  [ТС] 9
Цитата Сообщение от zss Посмотреть сообщение
И не забывайте удалять выделенную память:
в каком месте должна быть эта строка?

Цитата Сообщение от zss Посмотреть сообщение
Массив FIFO у Вас имеет размер FIFO[2][1]. Т.е. 2 строки с номерами от 0 до 1 и один столбец с номером 0.
мне нужен FIFO вида:
1 2 3 1 3
1 2 1 3 3
0 0 1 1 1
0
zss
Модератор
Эксперт С++
7485 / 6852 / 4326
Регистрация: 18.12.2011
Сообщений: 18,136
Завершенные тесты: 1
28.05.2015, 10:36 10
Тогда объявите его как
C++
1
int FIFO[3][5];
и не нужно динамического выделения памяти.

Добавлено через 2 минуты
Цитата Сообщение от egorikftp Посмотреть сообщение
в каком месте должна быть эта строка?
Там, где массив mas больше не нужен. У Вас получается, что в самом конце программы.
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 10:58  [ТС] 11
Цитата Сообщение от zss Посмотреть сообщение
и не нужно динамического выделения памяти.
У меня динамическая память должна быть, т.к. обход всей шахматной доски

Добавлено через 1 минуту
C++
1
2
3
4
5
6
    int **FIFO = new int *[2];
 
    for (int i = 0; i < M*M; i++)
    {
        FIFO[i] = new int[1];
    }
вот и получается трехмерный FIFO

Добавлено через 15 минут
сама задача работает и вроде правильный ответ в файл записывает.
но ошибки вылетают постоянно

Добавлено через 28 секунд
если менять границы во всех массивах, все сразу рушится
0
zss
Модератор
Эксперт С++
7485 / 6852 / 4326
Регистрация: 18.12.2011
Сообщений: 18,136
Завершенные тесты: 1
28.05.2015, 13:03 12
Цитата Сообщение от egorikftp Посмотреть сообщение
вот и получается трехмерный FIFO
Не вижу ничего трехмерного. Приведенный код создает двумерный массив размером FIFO[2][1]
Поскольку размеры индексов фиксированные, то код ничем не отличается от
C++
1
Int FIFO[2][1];
0
egorikftp
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 22
28.05.2015, 15:33  [ТС] 13
Цитата Сообщение от zss Посмотреть сообщение
Не вижу ничего трехмерного. Приведенный код создает двумерный массив размером FIFO[2][1]
а можно пожалуйста для трехмерного код?
0
28.05.2015, 15:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2015, 15:33

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

Не получается разобраться с ошибкой: app.exe has triggered a breakpoint
Задание: Считать информацию с одного файла и вывести в другой. Для 4...

Вылетает ошибка ".exe has triggered a breakpoint" Не понимаю, что не так
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() {...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru