Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Roulen
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
#1

Ошибка чтения, недостаточно прав ioswfd

19.05.2018, 06:55. Просмотров 703. Ответов 7
Метки нет (Все метки)

Сидел крайне долго, в поисковике искал, ничего не помогло... Очень прошу помочь, без понятия в чем может быть ошибка...
В низу оставил код для быстрого создания dat файла, с которого потом читаем. При первой итерации :
for (int i = 0; i <= number; i++) {
GetKey(books + i, priority);
cout << (books + i)->key << endl;
}
Возникает ошибка:
Вызвано исключение по адресу 0x0F3850CF (vcruntime140d.dll) в Проект3.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xCD28E61C.
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
#pragma warning(disable:4996)
#include <iostream>
#include <string>
#include <cctype> // for isalpha
using namespace std;
 
 
struct library {
    unsigned int UDK : 10; // 929 max
    string author;
    string name;
    unsigned int year : 11; // 2018 max  - MAKE SYS TIME
    unsigned int copies : 27; // 100 000 000 max 
    library *left = NULL;
    library *right = NULL;
    string key; // search key
};
 
FILE *file;
 
void print(string text);
string GetPrioriry();
void GetKey(library *book, string priority);
void GetData(library *data, string path, int number);
void sort(library *data, int number, string priority);
 
int main() {
    // declaring start instructions
    setlocale(LC_ALL, "Russian");
    cout << endl;
    print("Please, write data path");
    cout << "Path : ";
    string path;
    cin >> path;
    // get data
 
    // get books number
    library book;
    file = fopen(path.c_str(), "r+b");
    int number = 1;
    while (!feof(file)) {
        fread(&book, sizeof(library), 1, file);
        number++;
    }
    
    fclose(file);
    // get data
    library *books = new library[number], *uk = books;
    string priority = GetPrioriry(); // get sort priority
    cout << "NUMBER   = " << number << endl;
    cout << "PRIORITY = " << priority << endl;
    GetData(books, path, number);
    //sort(books, number, priority);
    // get keys
    for (int i = 0; i <= number; i++) {
        GetKey(books + i, priority);
        cout << (books + i)->key << endl;
    }
 
 
    system("pause");
    return 0;
}
 
 
// format text
void print(string text) {
    cout << "\t\t\t" << text << endl << "\t\t\t";
    for (int i = 0; i < text.length(); i++) cout << '-';
    cout << endl;
}
 
 
// return sort priority
string GetPrioriry() {
    string priority;
    while (priority.length() == 0 || priority.length() > 5) {
        priority = "";
        print("Please, write sort priority");
        cout << "1 - UDK" << endl;
        cout << "2 - Author" << endl;
        cout << "3 - Book name" << endl;
        cout << "4 - Release date" << endl;
        cout << "5 - Number of book copies" << endl;
        cout << "-------------------------" << endl << "For example, you can write all priority key : 21435 , or only part : 23" << endl;
        cout << "Priority : ";
        cin >> priority;
    }
    if (priority.length() < 5) {
        string types = "12345";
        bool flag = false;
        for (int k = 0; k < 5; k++) {
            for (int i = 0; i < priority.length(); i++) {
                if (priority[i] == types[k]) flag = true;
            }
            if (!flag) priority += types[k];
            flag = false;
        }
    }
    return priority;
}
 
// generate unique book id/key 
void GetKey(library *book, string priority) {
    for (int i = 0; i < 5; i++) {
        // get key
        switch (priority[i]) {
        case '1':
            book->key += to_string(book->UDK) + '|';
            cout << "hello" << endl;
            break;
        case '2':
            book->key += book->author + '|';
            break;
        case '3':
            book->key += book->name + '|';
            break;
        case '4':
            book->key += to_string(book->year) + '|';
            break;
        case '5':
            book->key += to_string(book->copies) + '|';
            break;
        default:
            break;
        }
    }
}
 
// include data
void GetData(library *data, string path, int number) {
    FILE *file;
    file = fopen(path.c_str(), "r+b");
    fread(data, sizeof(library), number, file);
    fclose(file);
}
 
// sort data
void sort(library *data, int number, string priority) {
    library save;
    int good = number;
    while (good != 0) {
        good = number;
        for (int i = 0; i < number; i++) {
            if ((data + i)->UDK > (data + i + 1)->UDK) {
                save = *(data + i);
                *(data + i) = *(data + i + 1);
                *(data + i + 1) = save;
            }
            else good--;
        }
    }
}
 
 
 
/*file = fopen(path.c_str(), "wb");
library book1 = { 1, "Bogorad O.A.", "Full stack developing", 2018 ,1 };
library book2 = { 2, "Hockens J.V.", "Way of my life", 2011 ,323 };
library book3 = { 3, "Boggy F.F.", "Boggy's job", 2015, 123 };
library book4 = { 4, "Roylad A.F.", "Best cars ever", 2018, 4221 };
library book5 = { 5, "Vesered O.E.", "Malware software", 2017, 5 };
library book6 = { 6, "Hello W.D.", "Hello world!", 2013, 171 };
library book7 = { 7, "Bye W.D.", "Bye, Bye word!", 2013, 19 };
fwrite(&book1, sizeof(library), 1, file);
fwrite(&book2, sizeof(library), 1, file);
fwrite(&book3, sizeof(library), 1, file);
fwrite(&book4, sizeof(library), 1, file);
fwrite(&book5, sizeof(library), 1, file);
fwrite(&book6, sizeof(library), 1, file);
fwrite(&book7, sizeof(library), 1, file);
fclose(file);*/

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

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2018, 06:55
Ответы с готовыми решениями:

Выдает ошибку недостаточно прав для чтения. Что сделать чтобы работало?
И объясните пожалуйста, все ли правильно и нужно ли эти файлы самому создавать,...

Ошибка обращения к строке (нарушение прав доступа чтения)
Добрый всем день немогу разобраться что за ошибка и как ее локализовать код и...

Нарушение прав доступа для чтения
В программе используется односвязный циклический список, все работает, но при...

Нарушение прав доступа для чтения
#define _CRT_SECURE_NO_WARNINGS #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt;...

Ошибка чтения из файла
Народ, помогите понять, почему программа выдает ошибку при чтении из файла ...

7
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
19.05.2018, 09:32 #2
Цитата Сообщение от Roulen Посмотреть сообщение
C
1
fread(&book, sizeof(library), 1, file);
std::string не годятся (без сериализации) для бинарных методов чтения/записи.
1
Roulen
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
19.05.2018, 12:15  [ТС] #3
Извиняюсь, nd2, не могли бы вы более подробно объяснить? Работал сс бинарными файлами пару раз, fread/fwrite отрабатывали отлично. Тут вроде тоже работают, беда именно при вызове GetKey, но по вашему сообщению предполагаю что ошибка формировалась ещё до вызова..
0
SuperKir
349 / 344 / 247
Регистрация: 10.03.2015
Сообщений: 1,436
Завершенные тесты: 1
19.05.2018, 12:19 #4
Roulen, для string выдели конкретный размер
1
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
19.05.2018, 12:19 #5
Цитата Сообщение от Roulen Посмотреть сообщение
более подробно объяснить
Записываешь в файл память под объектом std::string. А что там (в объекте std::string), по-твоему, находится?
1
Roulen
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
19.05.2018, 12:37  [ТС] #6
Извиняюсь, nd2, не могли бы вы более подробно объяснить? Работал сс бинарными файлами пару раз, fread/fwrite отрабатывали отлично. Тут вроде тоже работают, беда именно при вызове GetKey, но по вашему сообщению предполагаю что ошибка формировалась ещё до вызова..

Добавлено через 1 минуту
Извиняюсь за дубль, интернет подвел, можно примеры как совсем для идиота?

Добавлено через 1 минуту
Если в массиве string на массив char поменять вместо выделения размера под него, лучше будет?
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
19.05.2018, 12:49 #7
Лучший ответ Сообщение было отмечено Roulen как решение

Решение

Цитата Сообщение от Roulen Посмотреть сообщение
можно примеры
http://programming-lang.com/ru/comp_programming/meyers/1/j45.html
1
Roulen
9 / 1 / 3
Регистрация: 15.06.2016
Сообщений: 224
20.05.2018, 18:38  [ТС] #8
Что-то ночью не думалось совсем о том сколько памяти кушает string и как, буду знать, большое спасибо!
0
20.05.2018, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2018, 18:38

Ошибка чтения строки
есть задача считать из Edit данныe в таблицу ListView но выползает ошибка в...

ошибка чтения из файла
задача такая: нужно считать из файла текст. написал программу, но она считывает...

Ошибка чтения из потока
Здравствуйте. Считываю слова в цикле из потока. while(!input.eof()) { ...


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

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

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