Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/48: Рейтинг темы: голосов - 48, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
1

Нарушение прав доступа при чтении по адресу

26.06.2016, 14:14. Показов 10021. Ответов 14
Метки нет (Все метки)

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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
#include <iostream>
#include <locale.h>
#include <cstring>
#include <cmath>
 
using namespace std;
 
class String
{   
    public:
        char *str;
        int len;
 
        String();
        String(char *);
        String(char );
        String(const String &);
        ~String();
        char* GetStr();
        int GetLen ();
        void Output();
};
String::String()
{
        len=0;
        str=new char[len+1];
        str[0]='\0';
}
 
String::String(const char symb)
{
        len = 1;
        str=new char[len+1];
        str[1]='\0';
        str[0]=symb;
}
 
String::String(char *S)
{
        str = new char[strlen(S)+1];
        len=strlen(S);
        strcpy(str,S);
}
 
String::String(const String& from)
{
        char* T=GetStr();
        int L=GetLen();
        str=new char[L+1];  
        strcpy (str, T);
        len=L;
}
 
String::~String()
{
        if (len!=0)
        {
                delete[] str;
                len=0;
        }
}
 
void String::Output()
{
        for (int i = 0; i<len; i++)
                cout << str[i];
                cout << endl;
}
char* String::GetStr()
{
    return str;
}
int String::GetLen () 
{
    return len;
}
 
class Ident:public String
{
protected:
    int tmp;
public:
    Ident();
    Ident(const char str);
    Ident(char *);
    Ident(const Ident&);
    ~Ident();
    String operator=(String k);
    String operator+(String k);
    char operator[](int k); 
}
*tmpI;
 
Ident::Ident()
{
        len=0;
        str=new char[len+1];
        str[0]='\0';
}
 
Ident::Ident(const char symb)
{
        len = 1;
        str=new char[len+1];
        str[1]='\0';
        str[0]=symb;
        if (symb>='A' && symb<='Z' || symb>='a' && symb<='z' || symb>='0' && symb<='9')
                str[0]=symb;
        else
        {
                str[0]='\0';
                len=0;
        }
}
 
Ident::Ident(char *S)
{
        tmp=0;
        str = new char[strlen(S)+1];
        len=strlen(S);
        if (((S[0]>='A') && (S[0]<='Z')) || (S[0]>='a' && S[0]<='z') || (S[0]=='_'))
                for (int i=1;i<len;i++)
                {
                        if(!(((S[i]>='A') && (S[i]<='Z')) || ((S[i]>='a') && (S[i]<='z'))))
                                if(!(((S[i]>='0') && (S[i]<='9')))) tmp++;
                }
        else
                tmp++;
        if (tmp==0) strcpy(str,S);
        else
        {
                str[0]='\0';
                len=0;
        }
}
 
Ident::Ident(const Ident& from)
{
        char* T=GetStr();
        int L=GetLen();
        str=new char[L+1];  
        strcpy (str, T);
        len=L;
}
 
Ident::~Ident()
{
        if(tmpI)
        delete[]tmpI;
}
 
String Ident::operator=(String k)
{       String tmpS(k.str);
        int LenTmp;
        LenTmp=strlen(k.GetStr());
        if(len!=LenTmp)
        {
           if(str)
                   delete[] str;
           str=new char[LenTmp+1];
           len=LenTmp;
        }
        strcpy(str, k.GetStr());
        return tmpS;
}
 
String Ident::operator+(String k)
{
        String tmpS;
        tmpS.len=strlen(this->GetStr())+strlen(k.GetStr());
        tmpS.str=new char[tmpS.len+1];
        for(int i=0;i<tmpS.len+1;i++)
        {
            if(i<strlen(this->GetStr()))
                        tmpS.str[i]=this->str[i];
            else tmpS.str[i]=k.str[i-strlen(this->GetStr())];
        }
        return tmpS;
}
 
char Ident::operator[](int k)
{
 
        return str[k];
}
 
class Complex:public String
{
    public:
        char *str,*str1;
        double real,imog;
        Complex();
        Complex(double);
        Complex(double,double);
        Complex(char *);
        Complex(const Complex &);
        ~Complex();
        Complex operator =(const Complex &);
        Complex operator +(const Complex &);
        void Output(const Complex &c);
};
 
 
Complex :: Complex ()
  {
  };
 
 Complex :: Complex (double r)   
  {
    real = r;
    imog = 0;
  }
 
 Complex :: Complex (double r, double i)
  {
    real = r;
    imog = i;
  }
Complex::Complex(char*S)
{
    str = new char[strlen(S)+1];
    len=strlen(S);
    strcpy(str,S);
}
Complex::Complex(const Complex &c)
{
    real = c.real;
    imog = c.imog;
}
Complex::~Complex()
{
    delete[]str;
}
Complex Complex::operator=(const Complex &c)
{
    real = c.real;
    imog = c.imog;
    return *this;
}
Complex Complex::operator+(const Complex &c)   
{
    real += c.real;
    imog += c.imog;
    return *this;
}
void Complex :: Output(const Complex &c)
{
    cout << "(" << c.real << "i " << c.imog << ")";
}
int main()
{
        String s;
        String s1("12345");
        s1.Output();
        String s2('A');
        s2.Output();
        Complex a (5, 2);
        Complex b (3, -3);
        Complex c;
        c=a+b;
        c.Output(c);
        return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.06.2016, 14:14
Ответы с готовыми решениями:

Вызвано исключение по адресу 0x013C1891 в Jacobi.exe: 0xC0000005: нарушение прав доступа при чтении по адресу
#include &lt;math.h&gt; const double eps = 0.001; ///&lt; желаемая точность /// N - размерность...

Необработанное исключение по адресу 0x001B3371 в XXX.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFDF
Делал консольную змейку и столкнулся вот с такой проблемой. void stena(char **arr) { int y...

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

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

14
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
26.06.2016, 14:16 2
Цитата Сообщение от membly Посмотреть сообщение
Complex
У тебя ничего не получится, если ты будешь использовать смайлики в коде, что запрещено стандартом.
0
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
26.06.2016, 14:19  [ТС] 3
там : publuc

Добавлено через 59 секунд
ошибка вот такая
Необработанное исключение в "0x580d57aa (msvcr100d.dll)" в "kyrs.exe": 0xC0000005: Нарушение прав доступа при чтении "0xccccccc0".
0
Эксперт C
26059 / 16250 / 3492
Регистрация: 24.12.2010
Сообщений: 35,604
26.06.2016, 14:20 4
В быстром ответе есть ключик - Отключить смайлы
И теги кода ставить не забывай.
И объясняй, пожалуйста, что ТЕБЕ - не так.
0
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
26.06.2016, 14:21 5
Цитата Сообщение от membly Посмотреть сообщение
там : publuc
нет, там смайлик
Нарушение прав доступа при чтении по адресу
0
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
26.06.2016, 14:22  [ТС] 6
при отладке вылезает ошибка что я скинул выше
0
802 / 532 / 157
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
26.06.2016, 14:24 7
membly, ты пытаешься записать смайлик
Цитата Сообщение от membly Посмотреть сообщение
в "0x580d57aa (msvcr100d.dll)" в "kyrs.exe": 0xC0000005: Нарушение прав доступа при чтении "0xccccccc0".
0
Эксперт C
26059 / 16250 / 3492
Регистрация: 24.12.2010
Сообщений: 35,604
26.06.2016, 14:26 8
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
нет, там смайлик
:p дает язычок
Цитата Сообщение от membly Посмотреть сообщение
ошибка что я скинул выше
Где? Я не увидел.
0
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
26.06.2016, 14:29  [ТС] 9
разве подкласс указывается не так (class Ident : public String)
0
Эксперт C
26059 / 16250 / 3492
Регистрация: 24.12.2010
Сообщений: 35,604
26.06.2016, 14:29 10
Цитата Сообщение от Байт Посмотреть сообщение
Где? Я не увидел.
Извиняюсь. В посте 3. Не заметил.
Что-то с памятью не так. Но анализировать код, представленный в таком виде, нет никакого желания.
0
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
26.06.2016, 14:36  [ТС] 11
секунду

Добавлено через 59 секунд
https://www.cyberforum.ru/post9315430.html

Добавлено через 3 минуты
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
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
#include <iostream>
#include <locale.h>
#include <cstring>
#include <cmath>
 
using namespace std;
 
class String
{   
    public:
        char *str;
        int len;
 
        String();
        String(char *);
        String(char );
        String(const String &);
        ~String();
        char* GetStr();
        int GetLen ();
        void Output();
};
String::String()
{
        len=0;
        str=new char[len+1];
        str[0]='\0';
}
 
String::String(const char symb)
{
        len = 1;
        str=new char[len+1];
        str[1]='\0';
        str[0]=symb;
}
 
String::String(char *S)
{
        str = new char[strlen(S)+1];
        len=strlen(S);
        strcpy(str,S);
}
 
String::String(const String& from)
{
        char* T=GetStr();
        int L=GetLen();
        str=new char[L+1];  
        strcpy (str, T);
        len=L;
}
 
String::~String()
{
        if (len!=0)
        {
                delete[] str;
                len=0;
        }
}
 
void String::Output()
{
        for (int i = 0; i<len; i++)
                cout << str[i];
                cout << endl;
}
char* String::GetStr()
{
    return str;
}
int String::GetLen () 
{
    return len;
}
 
class Ident:public String
{
protected:
    int tmp;
public:
    Ident();
    Ident(const char str);
    Ident(char *);
    Ident(const Ident&);
    ~Ident();
    String operator=(String k);
    String operator+(String k);
    char operator[](int k); 
}
*tmpI;
 
Ident::Ident()
{
        len=0;
        str=new char[len+1];
        str[0]='\0';
}
 
Ident::Ident(const char symb)
{
        len = 1;
        str=new char[len+1];
        str[1]='\0';
        str[0]=symb;
        if (symb>='A' && symb<='Z' || symb>='a' && symb<='z' || symb>='0' && symb<='9')
                str[0]=symb;
        else
        {
                str[0]='\0';
                len=0;
        }
}
 
Ident::Ident(char *S)
{
        tmp=0;
        str = new char[strlen(S)+1];
        len=strlen(S);
        if (((S[0]>='A') && (S[0]<='Z')) || (S[0]>='a' && S[0]<='z') || (S[0]=='_'))
                for (int i=1;i<len;i++)
                {
                        if(!(((S[i]>='A') && (S[i]<='Z')) || ((S[i]>='a') && (S[i]<='z'))))
                                if(!(((S[i]>='0') && (S[i]<='9')))) tmp++;
                }
        else
                tmp++;
        if (tmp==0) strcpy(str,S);
        else
        {
                str[0]='\0';
                len=0;
        }
}
 
Ident::Ident(const Ident& from)
{
        char* T=GetStr();
        int L=GetLen();
        str=new char[L+1];  
        strcpy (str, T);
        len=L;
}
 
Ident::~Ident()
{
        if(tmpI)
        delete[]tmpI;
}
 
String Ident::operator=(String k)
{       String tmpS(k.str);
        int LenTmp;
        LenTmp=strlen(k.GetStr());
        if(len!=LenTmp)
        {
           if(str)
                   delete[] str;
           str=new char[LenTmp+1];
           len=LenTmp;
        }
        strcpy(str, k.GetStr());
        return tmpS;
}
 
String Ident::operator+(String k)
{
        String tmpS;
        tmpS.len=strlen(this->GetStr())+strlen(k.GetStr());
        tmpS.str=new char[tmpS.len+1];
        for(int i=0;i<tmpS.len+1;i++)
        {
            if(i<strlen(this->GetStr()))
                        tmpS.str[i]=this->str[i];
            else tmpS.str[i]=k.str[i-strlen(this->GetStr())];
        }
        return tmpS;
}
 
char Ident::operator[](int k)
{
 
        return str[k];
}
 
class Complex:public String
{
    public:
        char *str,*str1;
        double real,imog;
        Complex();
        Complex(double);
        Complex(double,double);
        Complex(char *);
        Complex(const Complex &);
        ~Complex();
        Complex operator =(const Complex &);
        Complex operator +(const Complex &);
        void Output(const Complex &c);
};
 
 
Complex :: Complex ()
  {
  };
 
 Complex :: Complex (double r)   
  {
    real = r;
    imog = 0;
  }
 
 Complex :: Complex (double r, double i)
  {
    real = r;
    imog = i;
  }
Complex::Complex(char*S)
{
    str = new char[strlen(S)+1];
    len=strlen(S);
    strcpy(str,S);
}
Complex::Complex(const Complex &c)
{
    real = c.real;
    imog = c.imog;
}
Complex::~Complex()
{
    delete[]str;
}
Complex Complex::operator=(const Complex &c)
{
    real = c.real;
    imog = c.imog;
    return *this;
}
Complex Complex::operator+(const Complex &c)   
{
    real += c.real;
    imog += c.imog;
    return *this;
}
void Complex :: Output(const Complex &c)
{
    cout << "(" << c.real << "i " << c.imog << ")";
}
int main()
{
        String s;
        String s1("12345");
        s1.Output();
        String s2('A');
        s2.Output();
        Complex a (5, 2);
        Complex b (3, -3);
        Complex c;
        c=a+b;
        c.Output(c);
        return 0;
}
0
Don't worry, be happy
17166 / 10050 / 1934
Регистрация: 27.09.2012
Сообщений: 25,040
Записей в блоге: 1
26.06.2016, 14:37 12
Во-первых, у Вас сразу утечка памяти:
Цитата Сообщение от membly Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
String::String()
{
        len=0;//оно равно нулю
        str=new char[len+1];
        str[0]='\0';
}
//...
String::~String()
{
        if (len!=0)//значит здесь false
        {
                delete[] str;//и сюда не попадем
                len=0;
        }
}
т.е. создание "пустой" строки с последующим её удалением приводит к утечке.

Также у Вас есть конструктор копирования у String,
но Вы забыли явно определить оператор присваивания,
отсюда у Вас сразу грабли, причем детские

Ну и не нужно внешнему коду давать доступ к членам-данным
без особой на то необходимости.
Сделайте строку так, чтобы она была самодостаточной.
Вот эти штуки тогда:
C++
1
2
        tmpS.len=strlen(this->GetStr())+strlen(k.GetStr());
        tmpS.str=new char[tmpS.len+1];
будут мешьше в голову бить,
точнее, их совсем не будет во внешнем коде.
Строка должна сама себя поддерживать в корректном состоянии.
1
Эксперт C
26059 / 16250 / 3492
Регистрация: 24.12.2010
Сообщений: 35,604
26.06.2016, 14:43 13
membly, Конечно, в таком виде уже смотреть приятнее. Но в таком объемном коде искать иголку в стоге сена, да еще если стог не ты метал, - удовольствие небольшое. Попробуйте пройтись отладчиком и обнаружить точку вылета. Или расставьте промежуточные cout, чтобы поймать место ошибки.
Это стандартные приемы программистов. Вы думаете, у меня подобных ошибок не было? Были! Вот так и искал...

Добавлено через 2 минуты

Не по теме:

Ну вот. Пока я ворчал, Croessmah во всем разобрался! Есть же светлые головы! Даже в такую жару.:)

0
1 / 1 / 0
Регистрация: 30.01.2016
Сообщений: 36
26.06.2016, 14:52  [ТС] 14
я новичек в си++
и еще только разбираюсь во всем, но все же в чем ошибка?
конструктор по умолчанию он и должен быть пустым?
дальше я создаю строку и она не пустая, ведь я сразу задаю эту строку.
Или вы имели ввиду если есть конструктор по умолчанию, то должна быть обязательно операция присваивания?
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
26.06.2016, 17:13 15
Цитата Сообщение от membly Посмотреть сообщение
и еще только разбираюсь во всем, но все же в чем ошибка?
В твоём случае указатель не бывает NULL, значит delete надо вызывать всегда и без проверок.

Конструктор у второго класса дублирует такой же у первого.
А для чего нужен tmpI и почему он в деструкторе?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2016, 17:13

Нарушение прав доступа при чтении по адресу
Здравствуйте, форумчане. Дабы не писать долго я описал свою проблему в видео...

Нарушение прав доступа при чтении по адресу
Доброго времени суток! Пишу некую прогу. Так вот у меня выпадает ошибка, на скринах показана....

Нарушение прав доступа при чтении по адресу
В приведённом ниже коде возникает ошибка времени выполнения с текстом из названия. Проблема в том,...

Нарушение прав доступа при чтении по адресу
Здравствуйте. Вот в этом коде(двусвязный список) выбивает такую штуку: Необработанное исключение...


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

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

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