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

Необработанное исключение по адресу при выводе на консоль - C++

Восстановить пароль Регистрация
 
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
06.09.2015, 23:00     Необработанное исключение по адресу при выводе на консоль #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
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
#include <iostream>
#include <string>
using namespace std;
 
class YearData
{
public:
    int day;
    int month;
    int year;
    string yyy[12] = { "января","февраля","марта","аперля","мая","июня","июля","августа","сентября","октября","ноября","декабря" };
    YearData(int d, int m, int y)
    {
        day = d;
        month = m;
        year = y;
    }
    YearData()
    {
        day = 0;
        month = 0;
        year = 0;
    }
    void Print1()
    {
        cout << this->day << " " << this->yyy[month]  << " " << this->year << endl;
 
    }
    void Print2()
    {
        if (day < 10) cout << "0";
        cout << day << "/";
        if (month < 10) cout << "0";
        cout << month << "/" << year << endl;
    }
    bool Push(int d, int m, int y)
    {
        if ((d > 31 || d < 1) && (m > 12 || m < 1))
        {
            return false;
        }
        //YearData(d, m, y);
        day = d;
        month = m;
        year = y;
        return true;
    }
};
 
class MyBot
{
    YearData *Qwerty[100];
    int col = 0;
public:
    void Push()
    {
        int i = 0;
        cout << "Сколько ввести дат?\n> ";
        (cin >> i).get();
        col = i;
        for (int y = 0; y < i && i < 100;y++)
        {
            int d, m, g;
            cout << "День\n> "; (cin >> d).get();
            cout << "Месяц\n> "; (cin >> m).get();
            cout << "Год\n> "; (cin >> g).get();
            YearData *Q = new YearData;
            if (Q->Push(d, m, g))
            {
                Qwerty[y] = Q;
            }
            else
            {
                y--;
                cout << "Неверный формат даты, введите еще раз" << endl;
            }
        }
    }
    void MyPrint()
    {
        int p = 0;
        cout << "Формат\n";
        cout << "1 - 5 января 1997 года\n2 - 05/01/1997\n";
        (cin >> p).get();
        if (p == 1)
        {
            for (int i = 0;i < col;i++)
            {
                Qwerty[i]->Print1();
                cout << "------------" << endl;
            }
        }
        else if (p == 2)
        {
            for (int i = 0;i < col;i++)
            {
                Qwerty[i]->Print2();
                cout << "------------" << endl;
            }
        }
    }
    void ParamYear()
    {
        int p = 0;
        cout << "Введите год\n> ";
        (cin >> p).get();
        for (int i = 0; i < col; i++)
        {
            if (Qwerty[i]->year == p)
            {
                Qwerty[i]->Print1();
                cout << "------------" << endl;
            }
        }
    }
    void ParamAll()
    {
        int p = 0;
        cout << "Введите число\n> ";
        (cin >> p).get();
        for (int i = 0; i < col; i++)
        {
            if (Qwerty[i]->year == p || Qwerty[i]->day == p || Qwerty[i]->month == p)
            {
                Qwerty[i]->Print1();
                cout << "------------" << endl;
            }
        }
    }
    void ParamTwo()
    {
        for (int i = 0; i < col; i++)
        {
            int summ = Qwerty[i]->day + Qwerty[i]->month + Qwerty[i]->year;
            if (( summ & (summ - 1)) == 0)
            {
                Qwerty[i]->Print1();
                cout << "------------" << endl;
            }
        }
    }
    void menu()
    {
        int p = 0;
        do {
            cout << "1 - добавить дату\n2 - вывести даты\n3 -  список дат для заданного года\n4 - список дат, которые имеют заданное число\n5 -  список дат, у которых сумма всех чисел соответстувет степени двойки\n> ";
            (cin >> p).get();
            switch (p)
            {
            case 1: Push(); break;
            case 2:MyPrint();break;
            case 3:ParamYear();break;
            case 4:ParamAll();break;
            case 5:ParamTwo();break;
            default:
                break;
            }
        } while (p > 0);
    }
};
 
 
void main()
{
    setlocale(LC_ALL,"RU");
    MyBot BoT;
    BoT.menu();
    system("pause");
}
Программа компилируется, но вылетает на строке cout << this->day << " " << this->yyy[month] << " " << this->year << endl;
В чем может быть проблема? Спасибо.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2015, 23:00     Необработанное исключение по адресу при выводе на консоль
Посмотрите здесь:

C++ Необработанное исключение по адресу
Необработанное исключение по адресу C++
C++ Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
C++ Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
C++ Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
06.09.2015, 23:19     Необработанное исключение по адресу при выводе на консоль #2
C переменными Qwerty, yyy и методами Print1(), Print2() вы не можете ждать коллективного разбора проблемы. Это же плевок в глаза другим разработчикам.

У меня всё.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.09.2015, 00:13     Необработанное исключение по адресу при выводе на консоль #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Месяцев 12:
C++
1
string yyy[12] = { "января","февраля","марта","аперля","мая","июня","июля","августа","сентября","октября","ноября","декабря" };
Так что индексы лежат в диапазоне [0,11], а у Вас, судя по условию
C++
1
if ((d > 31 || d < 1) && (m > 12 || m < 1))
работа с диапазоном [1,12].
this->yyy[month] - выход за пределы массива при переменной month равной 12
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
07.09.2015, 08:24  [ТС]     Необработанное исключение по адресу при выводе на консоль #4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
C переменными Qwerty, yyy и методами Print1(), Print2() вы не можете ждать коллективного разбора проблемы. Это же плевок в глаза другим разработчикам.
У меня всё.
У меня не проект на 3000 строк кода, а сам код не ломает защитную систему пентагона и КГБ. Ваше недовольство не более чем придирка.
Цитата Сообщение от Croessmah Посмотреть сообщение
Так что индексы лежат в диапазоне [0,11], а у Вас, судя по условию
Код C++Выделить код
1
if ((d > 31 || d < 1) && (m > 12 || m < 1))
работа с диапазоном [1,12].
this->yyy[month] - выход за пределы массива при переменной month равной 12
Глупейшая ошибка =(. Впредь буду внимательным. Спасибо.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
07.09.2015, 08:37     Необработанное исключение по адресу при выводе на консоль #5
Цитата Сообщение от SanychBY Посмотреть сообщение
Ваше недовольство не более чем придирка.
нет, он прав. В данном случае ошибку быстро увидел просто из-за того, что она
Цитата Сообщение от SanychBY Посмотреть сообщение
Глупейшая
а так бы разбираться врядли стал, тупо глаза сотрешь, пока поймешь что это за "col" (columns?), "g"(grade?), "Q"(наследник QObject?), в одном месте "y" выступает как год, в другом - "счетчик" цикла, хотя причем тут ордината...
А вот фрагменты кода:
C++
1
2
if (day < 10) cout << "0";
cout << "День\n> "; (cin >> d).get();
Почему на одной строчке? Чтобы машинально пропустить?
Ну если даже предположить, что лучше смотрится (хотя это не так), когда текстовое сообщение с последующим вводом находятся на одной строчке, то тогда почему
C++
1
2
        cout << "Введите год\n> ";
        (cin >> p).get();
расположены на разных строчках?

В общем, разбираться не особо хочется
SanychBY
 Аватар для SanychBY
38 / 45 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
07.09.2015, 08:44  [ТС]     Необработанное исключение по адресу при выводе на консоль #6
Цитата Сообщение от Croessmah Посмотреть сообщение
а так бы разбираться врядли стал, тупо глаза сотрешь, пока поймешь что это за "col" (columns?), "g"(grade?), "Q"(наследник QObject?), в одном месте "y" выступает как год, в другом - "счетчик" цикла, хотя причем тут ордината...
Ну нет у меня фантазии на поэтическое название переменных.
Цитата Сообщение от Croessmah Посмотреть сообщение
А вот фрагменты кода:
Код C++Выделить код
1
2
if (day < 10) cout << "0";
cout << "День\n> "; (cin >> d).get();
Тут полностью согласен
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2015, 09:04     Необработанное исключение по адресу при выводе на консоль
Еще ссылки по теме:

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу C++
Ошибка: необработанное исключение по адресу C++
C++ Необработанное исключение по адресу

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

Или воспользуйтесь поиском по форуму:
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1868 / 1664 / 580
Регистрация: 14.05.2014
Сообщений: 4,774
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 09:04     Необработанное исключение по адресу при выводе на консоль #7
Цитата Сообщение от SanychBY Посмотреть сообщение
поэтическое название переменных
не нужно поэтически их называть, не литературный кружок, как никак, достаточно просто давать осмысленные, "самодокументирующие" код имена.
Yandex
Объявления
07.09.2015, 09:04     Необработанное исключение по адресу при выводе на консоль
Ответ Создать тему
Опции темы

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