Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Sergey Chepets
2 / 2 / 5
Регистрация: 10.12.2016
Сообщений: 152
Завершенные тесты: 1
1

Программа аварийно завершается

27.11.2017, 20:45. Просмотров 783. Ответов 10
Метки нет (Все метки)

Доброго времени суток!

Моя программа аварийно завершается вернув значение "255 (0xFF)"
Прошу помощи в решении данной проблемы!

Вот код:
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
// Ханойские башни
#include <iostream> //потоквый ввод/вывод
#include <fstream> //ввод/вывод в файл
#include <iomanip> //редактирование вывода
#include <math.h> //математические вычесления
#include <windows.h> //отображение языка
/* вычисление времени работы участка кода */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int *stack1, *stack2, *stack3, top1=0, top2=0, top3=0, element, m;
 
/* добавить элемент в стек*/
void push(int start){
    if(start==1){
        for(int i=top1-1;i>=0;i--)
            stack1[i+1]=stack1[i];
 
        stack1[0]=element;
        top1++;
    }
 
    if(start==2){
        for(int i=top2-1;i>=0;i--)
            stack2[i+1]=stack2[i];
 
        stack2[0]=element;
        top2++;
    }
 
    if(start==3){
        for(int i=top3-1;i>=0;i--)
            stack3[i+1]=stack3[i];
 
        stack3[0]=element;
        top3++;
    }
}
 
/* удалить элемент из стека */
void pop(int start){
    if(start==1)
    {
        element=stack1[0];
        for(int i=0;i<=top1-1;i++){
            stack1[i]=stack1[i+1];
            if(i==top1-1)
                stack1[i]=0;
        }
        top1--;
    }
 
    if(start==2)
    {
        element=stack2[0];
        for(int i=0;i<=top2-1;i++){
            stack2[i]=stack2[i+1];
            if(i==top2-1)
                stack2[i]=0;
        }
        top2--;
    }
 
    if(start==3)
    {
         element=stack3[0];
        for(int i=0;i<=top3-1;i++){
            stack3[i]=stack3[i+1];
            if(i==top3-1)
                stack3[i]=0;
        }
        top3--;
    }
}
 
/* вывод стека*/
void Input(){
    cout<<"   Исходный   "<<"Промежуточный "<<"   Конечный  "<<endl;
    for(int i=0;i<m;i++){
            if(i<top1)
                cout<<setw(7)<<stack1[i];
            else cout<<setw(7)<<0;
            if(i<top2)
                cout<<setw(14)<<stack2[i];
            else cout<<setw(14)<<0;
            if(i<top3)
                cout<<setw(14)<<stack3[i]<<endl;
            else cout<<setw(14)<<0<<endl;
    }
}
 
 
void Hanoi_Tower(int m, int start, int destination, int buffer)
{
        if (m == 0)
        {
            return;
        }
            Hanoi_Tower(m-1, start, buffer, destination);
            cout<< start << " -> " << destination << endl;
            cout<<endl;
            pop(start);
            push(destination);
            Input();
            system("cls");
            Hanoi_Tower(m-1, buffer, destination, start);
}
 
 
int main(){
 
/* корректное отображение русского языка*/
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
int start=1, destination=3, buffer=2;
 
ofstream table("отчет.txt",ios_base::out | ios_base::trunc);
table.open("отчет.txt", ios_base::out | ios_base::trunc);
if (!table.is_open()) // если файл небыл открыт
    {
     cout << "Файл не может быть открыт или создан\n"; // напечатать соответствующее сообщение
     return 1; // выполнить выход из программы
    }
 
for (int m=1; m<11;m++)
{
stack1= new int [m];
stack2= new int [m];
stack3= new int [m];
 
for(int i=0;i<m;i++){
    element=m-i;
   push(start);
}
Input();
 
 clock_t t;
 t = clock(); //фиксация времени
 
Hanoi_Tower(m, start, destination, buffer);
 
  t = clock() - t;
  table<<"Количество колец: "<<m<<endl;
  table<<"Время до наступления конца света "<<((float)t)/CLOCKS_PER_SEC<<"секунд"<<endl; //вывод времени
  table<<"___________________________________________________________"<<endl;
//cout<<"Число операций: "<<pow(2,s)-1;
 
delete [] stack1;
delete [] stack2;
delete [] stack3;
}
table.close(); //закрытие файла
    cout << "Данные успешно записаны в файл отчет.txt\n";
    system("pause");
return 0;
}
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2017, 20:45
Ответы с готовыми решениями:

программа завершается аварийно
запускаю компилятор, все запустилось, работает (меню из кучи условий if-else). выбираю любой пункт...

Рекурсия, почему программа завершается аварийно?
Подскажите, почему не работает рекурсия?? #include &lt;iostream&gt; using namespace std; void fn(int...

Программа аварийно завершается после оператора scanf
Такая проблема. Я начинающий. Занимаюсь уже вторую неделю. Написал такой код, запускаю программа....

Проблемы с delete [], программа периодически аварийно завершается на строке с освобождением памяти.
Добрый день! Столкнулся со следующей задачей: в программе требуется довольно часто изменять...

Программа аварийно завершается с ошибкой "map/set iterators are incompatible"
Добрый день! Проблема такая: в s1 и s2 рандомно добавляю числа, хочу найти объединение этих...

10
jahdjkhasjdhjah
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
27.11.2017, 21:21 2
http://blog.iobit.com/error_ea_list_inconsistent-255-0xff_1333.html
https://social.msdn.microsoft.com/Fo...forum=tfsbuild

C++
1
2
ofstream table("отчет.txt",ios_base::out | ios_base::trunc);
table.open("отчет.txt", ios_base::out | ios_base::trunc);
Подозреваю, что проблема может быть в этом. Используйте передаваемые параметры либо только в конструкторе, либо только в методе.

+ вот здесь http://www.cplusplus.com/reference/fstream/ofstream/ofstream/ есть вот такая пометочка:
* out is always set for ofstream objects (even if explicitly not set in argument mode).
Т.е. ios_base::out писать вовсе не обязательно.
0
Sergey Chepets
2 / 2 / 5
Регистрация: 10.12.2016
Сообщений: 152
Завершенные тесты: 1
27.11.2017, 21:29  [ТС] 3
jahdjkhasjdhjah, к сожалению, это не помогло, но спасибо за ответ.
0
jahdjkhasjdhjah
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
27.11.2017, 21:49 4
C++
1
2
3
4
5
6
7
8
9
10
for (int m=1; m<11;m++)
{
stack1= new int [m];
stack2= new int [m];
stack3= new int [m];
 
for(int i=0;i<m;i++){
    element=m-i;
   push(start);
}
C++
1
2
3
delete [] stack1;
delete [] stack2;
delete [] stack3;
Раз косяк..

Добавлено через 12 минут
У вас вообще какая-то мешанина локальных и глобальных переменных. + нет контроля выхода за границы стека. Так что я бы порекомендовал для начала причесать код. Потом отладить его отдельные модули. Потом уже пытаться скрещивать их между собой.
0
zss
Модератор
Эксперт С++
7951 / 7136 / 4452
Регистрация: 18.12.2011
Сообщений: 18,838
Завершенные тесты: 1
27.11.2017, 21:51 5
Цитата Сообщение от jahdjkhasjdhjah Посмотреть сообщение
Раз косяк..
Вылетает она именно тут по
C++
1
delete[] stack3;
Но я в этом криминала не вижу.
Похоже, что вызов
Цитата Сообщение от Sergey Chepets Посмотреть сообщение
Hanoi_Tower(m, start, destination, buffer);
портит память.
0
Sergey Chepets
2 / 2 / 5
Регистрация: 10.12.2016
Сообщений: 152
Завершенные тесты: 1
27.11.2017, 21:54  [ТС] 6
jahdjkhasjdhjah, а можете более детально подсказать в чем проблема в выделенных Вами строчках?

Добавлено через 1 минуту
zss, а как избежать аварийного прекращения работы? просто память не очищать?
0
jahdjkhasjdhjah
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
27.11.2017, 21:57 7
В том, что выделяете кучу массивов, а сохраняете только указатель на последнее выделение.
То, что объявляете и используете локальную переменную с таким же именем, как глобальная.

И функция вывода у вас обозвана как Input

Ну и про ваши функции работы со стеком я написал, что нет контроля выхода за границы стека

Добавлено через 39 секунд
Цитата Сообщение от Sergey Chepets Посмотреть сообщение
а как избежать аварийного прекращения работы? просто память не очищать?
Переписать код на человеческий. вдумчиво и аккуратно.
0
Sergey Chepets
2 / 2 / 5
Регистрация: 10.12.2016
Сообщений: 152
Завершенные тесты: 1
27.11.2017, 21:57  [ТС] 8
zss, Программа какое-то время работает правильно, но потом начинается вакханалия со значениями в стеке и в конце возвращает ошибку "-1073740940"
0
jahdjkhasjdhjah
73 / 86 / 40
Регистрация: 02.11.2017
Сообщений: 379
27.11.2017, 22:00 9
Лучший ответ Сообщение было отмечено Sergey Chepets как решение

Решение

Также я бы очень рекомендовал отказаться от передачи параметров в функции работы со стеком через глобальные переменные.
0
Sergey Chepets
2 / 2 / 5
Регистрация: 10.12.2016
Сообщений: 152
Завершенные тесты: 1
27.11.2017, 22:07  [ТС] 10
Поставил меньшее количество "дисков". Программа выполняется, но при этом файл остается пустой. В чем проблема может быть?
0
zss
Модератор
Эксперт С++
7951 / 7136 / 4452
Регистрация: 18.12.2011
Сообщений: 18,838
Завершенные тесты: 1
28.11.2017, 08:34 11
Цитата Сообщение от Sergey Chepets Посмотреть сообщение
В чем проблема может быть?
Как пользоваться отладчиком (в Visual Studio)
0
28.11.2017, 08:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2017, 08:34

Класс для динамических матриц. После ввода элементов матрицы программа аварийно закрывается
В программе я создал класс, отвечающий за ввод и вывод динамической матрицы. Однако после ввода...

Не завершается программа
После ввода массива консоль не закрывается, почему? #include &quot;stdafx.h&quot; #include &lt;fstream&gt;...

Программа не завершается
Здравствуйте! 1) Моя программа на первом же тесте превышает положенное время (она не долго...


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

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

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