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

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

Войти
Регистрация
Восстановить пароль
 
SanychBY
39 / 46 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
#1

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

06.09.2015, 23:00. Просмотров 226. Ответов 6
Метки нет (Все метки)

Доброго времени суток.
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;
В чем может быть проблема? Спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2015, 23:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необработанное исключение по адресу при выводе на консоль (C++):

Необработанное исключение по адресу, нарушение прав доступа при записи по адресу - C++
вот само задание: Авиарейсы (номер рейса, пункт назначения, время вылета, дата вылета, стоимость билета, количество мест). Выбор по дате...

Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу - C++
Помогите, пожалуйста, исправит ошибку. Необработанное исключение по адресу 0x77D88E19 (ntdll.dll) в Lab11.exe: 0xC0000005: нарушение...

Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC - C++
Программа толком не написан, проверял ранд и возникли проблемы. Ф-ция ранд генерирует одно и тоже число, но если убрать srand(time(0));,...

Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09 - C++
Необработанное исключение по адресу 0x00105FD7 в Динамические структуры.exe: 0xC0000005: нарушение прав доступа при чтении по адресу...

Необработанное исключение по адресу при вводе даты - C++
имеется код #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() ...

Необработанное исключение по адресу 0x008B94C5. 0xC0000005: нарушение прав доступа при чтении по - C++
Здравствуйте! Функция должна искать локальные минимумы массива. То есть это элементы,которые меньше своих соседей. Дело в том,что функция...

6
rikimaru2013
C++ Game Dev
2439 / 1133 / 240
Регистрация: 30.11.2013
Сообщений: 3,690
06.09.2015, 23:19 #2
C переменными Qwerty, yyy и методами Print1(), Print2() вы не можете ждать коллективного разбора проблемы. Это же плевок в глаза другим разработчикам.

У меня всё.
1
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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
1
SanychBY
39 / 46 / 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
Глупейшая ошибка =(. Впредь буду внимательным. Спасибо.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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();
расположены на разных строчках?

В общем, разбираться не особо хочется
2
SanychBY
39 / 46 / 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();
Тут полностью согласен
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
07.09.2015, 09:04 #7
Цитата Сообщение от SanychBY Посмотреть сообщение
поэтическое название переменных
не нужно поэтически их называть, не литературный кружок, как никак, достаточно просто давать осмысленные, "самодокументирующие" код имена.
0
07.09.2015, 09:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2015, 09:04
Привет! Вот еще темы с ответами:

Необработанное исключение по адресу (msvcp110d.dll): нарушение прав досупа при записи - C++
Доброго времени суток. Надеюсь на вашу помощь в решении моей проблемы. Я имею две функции, первая считывает и перезаписывает в бинарном...

Необработанное исключение по адресу - C++
Доброго времени суток!!!!:) ест программа в ней переменная которой присваивается ссылка после чего программа немного ее корректирует и...

Необработанное исключение по адресу - C++
Доброго времени суток! Долгое время учился кодить на Паскале, в данный момент появилось желание начать кодить на С. В общем хотел...

Необработанное исключение по адресу - C++
Необработанное исключение по адресу...нарушение прав доступа при чтении по адресу... #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...


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

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

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