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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
#1

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

08.06.2013, 20:41. Просмотров 416. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 20:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа завершается с ошибкой, подскажите почему (C++):

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

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

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

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

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

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

7
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 20:47 #2
desk[xx-2][yy-1]='*'; - при xx=1 выход за пределы массива.
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 20:54  [ТС] #3
lazybiz, Согласен, но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;????
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:00 #4
Цитата Сообщение от Nikko12 Посмотреть сообщение
но почему тогда программа не завершается аварийно раньше, а только при достижениии строки return 0;
До и после функции main выполняется другой код, который подготавливает и завершает твою программу, видимо, при переполнении буфера затираются данные, которые использует код выполняющийся после main.
0
Kastaneda
Нарушитель
Эксперт С++
4671 / 2875 / 233
Регистрация: 12.12.2009
Сообщений: 7,307
Записей в блоге: 2
Завершенные тесты: 1
08.06.2013, 21:02 #5
Там добавляется проверка целостности стека. Вполне вероятно, что в релиз версии этой проверки не будет и программа будет завершаться нормально (если действительно не затерлось что-то важное).
0
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, Спасибо, буду знать.
0
castaway
Эксперт С++
4885 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
08.06.2013, 21:16 #7
Цитата Сообщение от Nikko12 Посмотреть сообщение
if(yy+1<=8&&xx-2<=8)
{
desk[xx-2][yy+1]='*';
}
Тут ты тоже не согласен?
0
Nikko12
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 162
08.06.2013, 21:28  [ТС] #8
Цитата Сообщение от lazybiz Посмотреть сообщение
Тут ты тоже не согласен?
Согласен, этого я даже не видел ((

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

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

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

подскажите почему программа работает неправильно - C++
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1&gt;------ Build...

Почему не собирается программа? Подскажите что не так? - C++
File.h #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class File { private: ...

Задание на операторы цикла (подскажите, почему не выполняется программа) - C++
Рассмотрим некоторое натуральное n (n &gt; 1). Если оно четно, то разделим его на 2, иначе умножим на 3 и прибавим 1. Если полученное число не...


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

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

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