Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
1

Ошибка 0xC0000005: Нарушение прав доступа при чтении "0xcccccccc"

12.10.2015, 16:03. Просмотров 2404. Ответов 9
Метки нет (Все метки)

Здравствуйте! Сегодня впервые столкнулся с данной ошибкой, поэтому не имею ни малейшего представления как найти источник проблемы и устранить его. Надеюсь на помощь мудрых наставников. Заранее выражаю глубокую признательность.

Данная проблема возникает при чтении из файла объектов класса.
C++
1
2
3
4
5
6
7
8
9
void ControlPanel::OpenFile(Data *pData,Data theData,ifstream &F)
{
        while(!F.eof())
        {
        F>>theData;
        pData=new Data(theData);
        myHead->Insert(pData);
}
}
Переменная F, открытие и закрытие файла объявлены в main
C++
1
2
3
4
5
cout<<"Введите имя файла"<<endl;
cin>>filename;
F2.open(filename);
I.OpenFile(pData,myData,F2);
F2.close();
Отладчик прекращает работу и выдает ошибку на этой строке
C++
1
        while(!F.eof())
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2015, 16:03
Ответы с готовыми решениями:

Необработанное исключение в "0x01082855" в "sort.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc"
Всем привет! помогите мне понять в чём дело. написал программу: #include &quot;stdafx.h&quot; #include...

Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string&gt; #include&lt;stdlib.h&gt; using namespace std; ...

Ошибка Необработанное исключение в "0x001d18f8" в "lr7v2.exe": 0xC0000005: Нарушение прав доступа при чтении "0xcdcdcde9"
class Hdd { public: char Hdd_name; int total_space; int free_space; int speed; ...

Возникает ошибка "0xC0000005: Нарушение прав доступа при чтении "0xfeeefee2"."
Подскажите, пожалуйста, в чем может быть ошибка и как его исправить? В деструкторе указывает на...

0xC0000005: Нарушение прав доступа при записи "0xcccccccc". Инициализация строк
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; using namespace...

9
nmcf
6541 / 5763 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
12.10.2015, 16:13 2
А операция извлечения для класса Data реализована?
0
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
12.10.2015, 16:32  [ТС] 3
nmcf, вроде да

Таким вот образом:
C++
1
2
3
4
5
ifstream & operator >>(ifstream &in,Data &theData)
{
    in>>theData.Mark>>theData.Name>>theData.HorsePower>>theData.MaxSpeed>>theData.Mass;
    return in;
}
Вот сам класс Data
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Data
{
private:
    char Mark[20];
    char Name[20];
    float HorsePower;
    int MaxSpeed;
    float Mass;
public:
    Data(){};
    Data(Data &);
    ~Data(){};
    friend istream &operator >>(istream & in, Data &theData);
    friend ifstream &operator >>(ifstream & in,Data &theData);
    friend ostream &operator <<(ostream & out,Data *theData);
    friend ofstream &operator <<(ofstream & out, Data theData);
    const Data& operator =(const Data &theData);
    bool Compare(char *name);
};
0
nmcf
6541 / 5763 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
12.10.2015, 16:34 4
Так может файл кривой? Что в файле?
И не понятно, зачем второй параметр у функции. theData должен быть локальным.
0
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
12.10.2015, 17:05  [ТС] 5
nmcf, с файлами вроде все в порядке. Только что создал несколько новых файлов, как в ручную в блокноте так и в программе.
Путем проб пришел к заключению, что проблема в двух строках char. Если их убрать, оставив только числовые переменные - то программа читает файлы.
Также подозреваю, что проблема в конструкторе копировщике и операторе присваивания:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Data::Data(Data & theData)
{
    *this=theData;
}
const Data& Data::operator=(const Data &theData)
{
    strcpy(Mark,theData.Mark);
    strcpy(Name,theData.Name);
    HorsePower=theData.HorsePower;
    MaxSpeed=theData.MaxSpeed;
    Mass=theData.Mass;
 
    return *this;
}
Если заменить функции strcpy на strcpy_s то вместо старой ошибки появляется совершенно другая:
http://storage3.static.itmages.ru/i/...32f44adfbf.jpg
0
nmcf
6541 / 5763 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
12.10.2015, 17:10 6
Какая с ними проблема? Там пробелов внутри нет, 19 символов не превышают?
Пример содержимого покажи.
0
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
12.10.2015, 17:18  [ТС] 7
nmcf, вот пожалуйста.
0
Вложения
Тип файла: txt 1.txt (33 байт, 3 просмотров)
Тип файла: txt 2.txt (34 байт, 2 просмотров)
Тип файла: txt car.txt (69 байт, 2 просмотров)
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
12.10.2015, 17:28  [ТС] 8
nmcf, можете, пожалуйста, при наличии времени или желании, проверить работоспособность программы на своей машине. Может проблема в моей Visual Stuidio или вообще в моем ПК
MyClass
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
#include <iostream>
using namespace std;
 
class Data
{
private:
    char Mark[20];
    char Name[20];
    float HorsePower;
    int MaxSpeed;
    float Mass;
public:
    Data(){};
    Data(Data &);
    ~Data(){};
    friend istream &operator >>(istream & in, Data &theData);
    friend ifstream &operator >>(ifstream & in,Data &theData);
    friend ostream &operator <<(ostream & out,Data *theData);
    friend ofstream &operator <<(ofstream & out, Data theData);
    const Data& operator =(const Data &theData);
    bool Compare(char *name);
};
 
 
class Node
{
public:
    Node(){};
    virtual Node* Insert(Data *theData)=0;
    virtual ~Node(){};
    virtual void Show()=0;
    virtual void Save(ofstream &F)=0;
    virtual Node* Search(char *name,bool &WeWillBeDeletedIt)=0;
    virtual Node* Remove(Node *find)=0;
    virtual void Edit()=0;
};
 
class HeadNode: public Node 
{
    Node *Next;
public:
    HeadNode();
    ~HeadNode(){delete Next;};
    virtual Node* Insert(Data *theData);
    virtual void Show();
    virtual void Save(ofstream &F);
    virtual Node* Search(char *name,bool &WeWillBeDeletedIt);
    virtual Node* Remove(Node *find);
    virtual void Edit(){};
};
 
class InternalNode: public Node 
{
    Data *myData;
    Node *Next;
public:
    InternalNode(Data *theData,Node *theNext);
    virtual ~InternalNode(){delete Next;delete myData;};
    virtual Node* Insert(Data*theData);
    virtual void Show();
    virtual void Save(ofstream &F);
    virtual Node* Search(char *name,bool &WeWillBeDeletedIt);
    virtual Node* Remove(Node *find);
    virtual void Edit();
};
 
class TailNode: public Node 
{
public:
    TailNode(){};
    ~TailNode(){};
    virtual Node * Insert(Data *theData);
    virtual void Show(){};
    virtual void Save(ofstream &F){};
    virtual Node* Search(char *name,bool &WeWillBeDeletedIt);
    virtual Node* Remove(Node *find);
    virtual void Edit(){};
};
 
class ControlPanel 
{
    HeadNode *myHead;
public:
    ControlPanel();
    ~ControlPanel(){delete myHead;};
    void Insert(Data *theData);
    void OpenFile(Data *pData, Data theData, ifstream &);
    void ShowAll();
    void SaveAll(ofstream &F);
    void Search();
};

MyFunctions
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
#include "MyClass.h"
#include <iostream>
#include <fstream>
using namespace std;
 
Data::Data(Data & theData)
{
    *this=theData;
}
const Data& Data::operator=(const Data &theData)
{
    strcpy_s(Mark,theData.Mark);
    strcpy_s(Name,theData.Name);
    HorsePower=theData.HorsePower;
    MaxSpeed=theData.MaxSpeed;
    Mass=theData.Mass;
 
    return *this;
}
istream & operator >>(istream &in, Data &theData)
{
    cout<<"¬ведите марку автомобил¤\n";
    in>>theData.Mark;
    cout<<"¬ведите название автомобил¤\n";
    in>>theData.Name;
    cout<<"¬ведите количество лошадинных сил\n";
    in>>theData.HorsePower;
    cout<<"¬ведите максимальную скорость\n";
    in>>theData.MaxSpeed;
    cout<<"¬ведите массу автомобил¤\n";
    in>>theData.Mass;
 
    return in;
}
ostream & operator <<(ostream &out,Data *theData)
{
    out<<theData->Mark<<"\t"<<theData->Name<<"\t"<<theData->HorsePower<<"\t"<<theData->MaxSpeed<<"\t"<<theData->Mass<<endl;
    return out;
}
 
ifstream & operator >>(ifstream &in, Data &theData)
{
    in>>theData.Mark>>theData.Name>>theData.HorsePower>>theData.MaxSpeed>>theData.Mass;
    return in;
}
ofstream & operator <<(ofstream &out, Data theData)
{
    out<<endl<<theData.Mark<<"\n"<<theData.Name<<"\n"<<theData.HorsePower<<"\n"<<theData.MaxSpeed<<"\n"<<theData.Mass;
    return out;
}
bool Data::Compare(char *name)
{
    int i;
    i=strcmp(Name, name);
    if(i!=0)
        return false;
    else
        return true;
 
}
 
InternalNode::InternalNode(Data *theData, Node *theNext):myData(theData),Next(theNext)
{}
 
Node* InternalNode::Insert (Data *theData) 
{
    InternalNode * tempNode=new InternalNode(theData,this);
    return tempNode;
}
 
void InternalNode::Show()
{
    cout<<myData;
    Next->Show();
}
 
HeadNode::HeadNode()
{
    Next=new TailNode;
}
 
Node * HeadNode::Insert(Data *theData)
{
    Next=Next->Insert(theData);
    return this;
}
 
void HeadNode::Show()
{
    Next->Show();
}
 
Node *TailNode::Insert(Data *theData)
{
    InternalNode *tempNode=new InternalNode(theData, this);
    return tempNode;
}
 
ControlPanel::ControlPanel()
{
    myHead=new HeadNode;
}
 
void ControlPanel::Insert(Data*theData)
{
    myHead->Insert(theData);
}
 
void ControlPanel::ShowAll()
{
    myHead->Show();
}
 
void ControlPanel::OpenFile(Data *pData,Data theData,ifstream &F)
{
        while(!F.eof())
        {
        F>>theData;
        pData=new Data(theData);
        myHead->Insert(pData);
        }
}
 
void InternalNode::Save(ofstream &F)
{
    F<<myData;
    Next->Save(F);
}
void HeadNode::Save(ofstream &F)
{
    Next->Save(F);
}
 
void ControlPanel::SaveAll(ofstream &F)
{
    myHead->Save(F);
}
 
Node* HeadNode::Search(char *name,bool &WeWillBeDeletedIt)
{
    Node *find=NULL;
    find=Next->Search(name,WeWillBeDeletedIt);
    return find;
}
Node *InternalNode::Search(char *name,bool &WeWillBeDeletedIt)
{
    int key;
    Node *find=NULL;
    bool i=0;
    i=myData->Compare(name);
        if(i==true)
        {
            find=this;
            cout<<myData;
            cout <<"\n1.”далить\n2.–едактировать\n";
            cin>>key;
            if(key==1)
            WeWillBeDeletedIt=true;
            else
                if(key==2)
                    this->Edit();
        }
    else
        find=Next->Search(name,WeWillBeDeletedIt);
 
    return find;
}
Node *TailNode::Search(char *name,bool &WeWillBeDeletedIt)
{
    return NULL;
}
void ControlPanel::Search()
{
    char name[20];
    cout<<"¬ведите название машины"<<endl;
    cin>>name;
    Node *find=NULL;
    bool WeWillBeDeletedIt=false;
    find=myHead->Search(name, WeWillBeDeletedIt);
    if (find==NULL)
        cout<<"Ќе найдено!"<<endl;
    if(WeWillBeDeletedIt==true)
        myHead->Remove(find);
        
}
 
Node* HeadNode::Remove(Node *find)
{
    Next=Next->Remove(find);
    return Next;
}
 
Node* InternalNode::Remove(Node *find)
{
        if(this==find)
            {
                Node *temp=Next;
                Next=NULL;
                delete this;
                return temp;
            }
        else
            {
                Next=Next->Remove(find);
                return this;
            }
            
}
 
Node* TailNode::Remove(Node *find)
{
    return this;
}
 
void InternalNode::Edit()
{
    Data newData;
    cin>>newData;
    Data *pData=new Data(newData);
    myData=pData;
}

MyMain
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
#include <iostream>
#include <fstream>
#include "MyClass.h"
 
 
 
using namespace std;
 
int main()
{
    setlocale(0, "Russian");
    Data myData;
    Data *pData;
    ofstream F1;
    ifstream F2;
    ControlPanel I;
    int key1=0;
    char key2, filename[20]="";
menu:
        cout<<endl<<"--------------------------------------------------------------------------------";
        cout<<"1.Добавить элемент в список\n2.Открыть готовый файл\n3.Показать список\n4.Сохранить в файл\n5.Найти элемент\n0.Выйти\n";
        cout<<"--------------------------------------------------------------------------------"<<endl;
        cin>>key1;
        key2='y';
        switch(key1)
        {
        case 1:
            while(key2=='y')
            {
                cin>>myData;
                pData=new Data(myData);
                I.Insert(pData);
                cout<<"Для продолжения ввода введите 'y'"<<endl;
                cin>>key2;
            }
            goto menu;
            break;
        case 2:
            cout<<"Введите имя файла"<<endl;
            cin>>filename;
            F2.open(filename);
            I.OpenFile(pData,myData,F2);
            F2.close();
            I.ShowAll();
            goto menu;
            break;
        case 3:
            I.ShowAll();
            goto menu;
            break;
        case 4:
            cout<<"Введите имя файла"<<endl;
            cin>>filename;
            F1.open(filename);
            I.SaveAll(F1);
            F1.close();
            goto menu;
            break;
        case 5:
            I.Search();
            goto menu;
            break;
        case 0:
            exit(0);
        }   
        
}
0
nmcf
6541 / 5763 / 2623
Регистрация: 14.04.2014
Сообщений: 24,498
12.10.2015, 17:42 9
Лучший ответ Сообщение было отмечено Akrage как решение

Решение

Всё работает с некоторыми изменениями:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Data
{
private:
    char Mark[20];
    char Name[20];
    float HorsePower;
    int MaxSpeed;
    float Mass;
public:
    Data()
    {
        *Mark = '\0';
        *Name = '\0';
    };
    Data(Data &);
    ~Data(){};
    friend istream &operator >>(istream & in, Data &theData);
    friend ifstream &operator >>(ifstream & in,Data &theData);
    friend ostream &operator <<(ostream & out,Data *theData);
    friend ofstream &operator <<(ofstream & out, Data theData);
    const Data& operator =(const Data &theData);
    bool Compare(char *name);
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
class ControlPanel 
{
    HeadNode *myHead;
public:
    ControlPanel();
    ~ControlPanel(){delete myHead;};
    void Insert(Data *theData);
    void OpenFile(ifstream &);
    void ShowAll();
    void SaveAll(ofstream &F);
    void Search();
};
C++
1
2
3
4
5
6
7
8
9
10
11
12
void ControlPanel::OpenFile(ifstream &F)
{
    Data *pData;
    Data theData;
 
        while(true)
        {
        if (!(F >> theData)) break;
        pData=new Data(theData);
        myHead->Insert(pData);
        }
}
C++
1
2
3
4
5
6
7
8
9
        case 2:
            cout<<"Введите имя файла"<<endl;
            cin>>filename;
            F2.open(filename);
            I.OpenFile(F2);
            F2.close();
            I.ShowAll();
            goto menu;
            break;
1
Akrage
5 / 5 / 4
Регистрация: 26.03.2015
Сообщений: 28
12.10.2015, 17:58  [ТС] 10
nmcf, с вашими поправками у меня тоже все заработало. Огромное спасибо за уделённое время, вы мне очень помогли.
0
12.10.2015, 17:58
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 17:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Необработанное исключение в "0x00412b4a" в "kursovik.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000004".
Программа компилируется нормально но потом на строчке MoveToEx(hdc,Mas.a]-&gt;x*20,Mas.a]-&gt;y*20,0);...

Необработанное исключение в "0x00414558" в "467.exe": 0xC0000005: Нарушение прав доступа при чтении "0xabababbb"
При выполнении этого кода #include &lt;iostream&gt; #include&lt;conio.h&gt; using namespace std; int...

Необработанное исключение в "0x775e15de" в "laba3.exe": 0xC0000005: Нарушение прав доступа при чтении "0xfdfdfdf9".
вылезает ошибка Необработанное исключение в &quot;0x775e15de&quot; в &quot;laba3.exe&quot;: 0xC0000005: Нарушение прав...


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

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

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