Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 20:41     Программа завершается с ошибкой, подскажите почему #1
Вводится координата шахматной доски где распологается конь, это координата при выводе обозначается "К",клетки которые бьет конь обозначаются "звездочкой". В конце выводится доска с обозначением координат куда конь может побить, вот код:
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. Заранее спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 20:47     Программа завершается с ошибкой, подскажите почему #2
desk[xx-2][yy-1]='*'; - при xx=1 выход за пределы массива.
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 20:54  [ТС]     Программа завершается с ошибкой, подскажите почему #3
lazybiz, Согласен, но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;????
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:00     Программа завершается с ошибкой, подскажите почему #4
Цитата Сообщение от Nikko12 Посмотреть сообщение
но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;
До и после функции main выполняется другой код, который подготавливает и завершает твою программу, видимо, при переполнении буфера затираются данные, которые использует код выполняющийся после main.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.06.2013, 21:02     Программа завершается с ошибкой, подскажите почему #5
Там добавляется проверка целостности стека. Вполне вероятно, что в релиз версии этой проверки не будет и программа будет завершаться нормально (если действительно не затерлось что-то важное).
Nikko12
 Аватар для Nikko12
1 / 1 / 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, Спасибо, буду знать.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:16     Программа завершается с ошибкой, подскажите почему #7
Цитата Сообщение от Nikko12 Посмотреть сообщение
if(yy+1<=8&&xx-2<=8)
{
desk[xx-2][yy+1]='*';
}
Тут ты тоже не согласен?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 21:28     Программа завершается с ошибкой, подскажите почему
Еще ссылки по теме:

C++ Задание на операторы цикла (подскажите, почему не выполняется программа)
C++ Почему программа прерывается с ошибкой? Реализовывал решение СЛАУ методом Гаусса
C++ Не завершается программа

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

Или воспользуйтесь поиском по форуму:
Nikko12
 Аватар для Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 21:28  [ТС]     Программа завершается с ошибкой, подскажите почему #8
Цитата Сообщение от lazybiz Посмотреть сообщение
Тут ты тоже не согласен?
Согласен, этого я даже не видел ((

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

Добавлено через 34 секунды
P.S. Нужно быть внимательнее(((
Yandex
Объявления
08.06.2013, 21:28     Программа завершается с ошибкой, подскажите почему
Ответ Создать тему
Опции темы

Текущее время: 02:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru