Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
1

Программа завершается с ошибкой, подскажите почему

08.06.2013, 20:41. Просмотров 477. Ответов 7
Метки нет (Все метки)

Вводится координата шахматной доски где распологается конь, это координата при выводе обозначается "К",клетки которые бьет конь обозначаются "звездочкой". В конце выводится доска с обозначением координат куда конь может побить, вот код:
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
#include<iostream>
#include<fstream>
using namespace std;
 int main()
 { 
     long i,j,x,y,n,yy,xx;
     char desk[20][20];
     string str;
    cin>>str;
    for(y=0;y<=10;y++)
    {
        for(x=0;x<=10;x++)
        {
            desk[x][y]='.';
        }
    }
    if(str[0]=='a')
    {
        x=1;
    }
    if(str[0]=='b')
    {
        x=2;
    }
    if(str[0]=='c')
    {
        x=3;
    }
    if(str[0]=='d')
    {
        x=4;
    }
    if(str[0]=='e')
    {
        x=5;
    }
    if(str[0]=='f')
    {
        x=6;
    }
    if(str[0]=='g')
    {
        x=7;
    }
    if(str[0]=='h')
    {
        x=8;
    }
    y=str[1]-'0';
    desk[x][y]='K';
    xx=x,yy=y;
    if(yy+2<=8&&xx-1>=1)//up
    {
        desk[xx-1][yy+2]='*';
    }
    if(yy+2<=8&&xx+1<=8)
    {
        desk[xx+1][yy+2]='*';
    }
    if(yy+1<=8&&xx+2<=8)//r
    {
        desk[xx+2][yy+1]='*';
    }
    if(yy-1>=1&&xx+2<=8)
    {
        desk[xx+2][yy-1]='*';
    }
    if(yy-2>=1&&xx-1>=1)//d
    {
        desk[xx-1][yy-2]='*';
    }
    if(yy-2>=1&&xx+1<=8)
    {
        desk[xx+1][yy-2]='*';
    }
    if(yy-1>=1&&xx-2>=1)//l
    {
        desk[xx-2][yy-1]='*';
    }
    if(yy+1<=8&&xx-2<=8)
    {
        desk[xx-2][yy+1]='*';
    }
    for(y=8;y>=1;y--)
    {
        for(x=1;x<=8;x++)
        {
            cout<<desk[x][y]<<" ";
        }
        if(y==8&&x==8)
        {
            return 0;
        }
        cout<<endl;
    }
    return 0;// ОШИБКА
 }
P.S. Программа работает хорошо, но если ввести координаты, а5 или а6, то при достижении строки return 0, программа аварийно завершается. Пожалуйста объясните почему, я не понимаю......
P.S.S. Заранее спасибо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 20:41
Ответы с готовыми решениями:

Программа завершается с ошибкой Killed
Программа завершается с ошибкой Killed, когда я выделяю очень много динамической памяти, но меньше...

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

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

Собранное приложение завершается с ошибкой
Здравствуйте. Подскажите пожалуйста новичку. Взял приложение из учебника, переписал в Visual...

Почему программа прерывается с ошибкой? Реализовывал решение СЛАУ методом Гаусса
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int n=0; int...

7
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 20:47 2
desk[xx-2][yy-1]='*'; - при xx=1 выход за пределы массива.
0
Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 20:54  [ТС] 3
lazybiz, Согласен, но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;????
0
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:00 4
Цитата Сообщение от Nikko12 Посмотреть сообщение
но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;
До и после функции main выполняется другой код, который подготавливает и завершает твою программу, видимо, при переполнении буфера затираются данные, которые использует код выполняющийся после main.
0
08.06.2013, 21:00
Kastaneda
Jesus loves me
Эксперт С++
5053 / 3071 / 351
Регистрация: 12.12.2009
Сообщений: 7,771
Записей в блоге: 2
Завершенные тесты: 1
08.06.2013, 21:02 5
Там добавляется проверка целостности стека. Вполне вероятно, что в релиз версии этой проверки не будет и программа будет завершаться нормально (если действительно не затерлось что-то важное).
0
Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 21:12  [ТС] 6
lazybiz, Я тут внимательнее посмотрел мой код и уже не согласен, что desk[xx-2][yy-1]='*'; - при xx=1 выход за пределы массива, т. к. перед этим идет проверка:

C++
1
2
3
4
if(yy-1>=1&&xx-2>=1)//l
    {
        desk[xx-2][yy-1]='*';
    }
хх не может быть равен 1.
P.S. В принципе он ни где не может выходить за границы массива, так как везде стоит проверкаб или я что-то недопонимаю в собоственом коде.

Добавлено через 24 секунды
Kastaneda, Спасибо, буду знать.
0
castaway
Эксперт С++
4945 / 3051 / 455
Регистрация: 10.11.2010
Сообщений: 11,146
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:16 7
Цитата Сообщение от Nikko12 Посмотреть сообщение
if(yy+1<=8&&xx-2<=8)
{
desk[xx-2][yy+1]='*';
}
Тут ты тоже не согласен?
0
Nikko12
2 / 2 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 21:28  [ТС] 8
Цитата Сообщение от lazybiz Посмотреть сообщение
Тут ты тоже не согласен?
Согласен, этого я даже не видел ((

Добавлено через 8 минут
lazybiz, Спасибо, исправил ошибку, благодарю.

Добавлено через 34 секунды
P.S. Нужно быть внимательнее(((
0
08.06.2013, 21:28
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 21:28

Не прогружаются каскады haarcascade_frontalface_alt.xml в Visual Studio 2010. OpenCV. Завершается с ошибкой 1
Все форумы перечитала, много вариантов испробовала, но результата никакого. Подскажите кто...

подскажите, почему программа выдает ошибку?
задание примерное такое: на заданном интервале посчитать значение ряда Тейлора с заданным шагом и...

подскажите почему программа работает неправильно
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает...


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

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

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