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

Ошибка при удаление из бинарного файла - C++

Восстановить пароль Регистрация
 
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
20.05.2014, 17:20     Ошибка при удаление из бинарного файла #1
Нужно удалить из бинарного файла, содержащего информацию о студентах, определённого человека. Но когда выполняется процедура, выдаёт: Необработанное исключение в "0x509bad54 (msvcp100d.dll)" в "2.exe": 0xC0000005: Нарушение прав доступа при записи "0xfeeefeee". Где ошибка?
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
void delete_data()
{
    students del[200];
    students look;
    cout<<"Please, enter the name of file:";
    string filename;
    cin>>filename;
    cout<<"Now, Enter the sirname and name of student to delete:";
    string FN,N;
    cin>>FN>>N;
    F.open(filename,ios::in | ios::binary);
    int n=0;
    while (F.read((char*)&look.FamN,sizeof(look.FamN)))
    {
        del[n].FamN=look.FamN;
        F.read((char*)&look.Name,sizeof(look.Name));
        del[n].Name=look.Name;
        F.read((char*)&look.FatN,sizeof(look.FatN));
        del[n].FatN=look.FatN;
        F.read((char*)&look.age,sizeof(look.age));
        del[n].age=look.age;
        F.read((char*)&look.gender,sizeof(look.gender));
        del[n].gender=look.gender;
        F.read((char*)&look.course,sizeof(look.course));
        del[n].course=look.course;
        for (int i=0; i<am; i++) 
            {
                int mar;
                F.read((char*)&mar,sizeof(mar));
                del[n].mark.push_back(mar);
            }
        n++;
    }
    F.close();
    F.open(filename,ios::out | ios::binary);
    F.clear();
    for (int i=0; i<n; i++) if (del[i].FamN!=FN || del[i].Name!=N) 
        {
            stuff.FamN=del[i].FamN;
            F.write((char*)&stuff.FamN,sizeof(stuff.FamN));
            stuff.Name=del[i].Name;
            F.write((char*)&stuff.Name,sizeof(stuff.Name));
            stuff.FatN=del[i].FatN;
            F.write((char*)&stuff.FatN,sizeof(stuff.FatN));
            stuff.age=del[i].age;
            F.write((char*)&stuff.age,sizeof(stuff.age));
            stuff.gender=del[i].gender;
            F.write((char*)&stuff.gender,sizeof(stuff.gender));
            stuff.course=del[i].course;
            F.write((char*)&stuff.course,sizeof(stuff.course));
            for (int j=0; j<am; j++) 
                {
                    int mar=del[i].mark[j];
                    F.write((char*)&mar,sizeof(mar));
                }
        }
    F.close();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
20.05.2014, 17:31     Ошибка при удаление из бинарного файла #2
students - это что? Структура?
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
20.05.2014, 17:35  [ТС]     Ошибка при удаление из бинарного файла #3
Да. Описывает фамилию, имя, отчество, возраст, пол, курс и оценки.
C++
1
2
3
4
5
6
7
8
9
10
 struct students
{
    string FamN;
    string Name;
    string FatN;
    unsigned int age;
    char gender;
    unsigned short int course;
    vector <int> mark;
};
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
20.05.2014, 17:36     Ошибка при удаление из бинарного файла #4
Что такое stuff? Откуда ты его взял? В del[] записал, оттуда и бери.
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
20.05.2014, 17:37  [ТС]     Ошибка при удаление из бинарного файла #5
А, это вместо look. Забыл переправить, но ошибка была до этого.
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
20.05.2014, 17:44     Ошибка при удаление из бинарного файла #6
В string дело. Это же класс, а не массив, внутреннее представление не известно. Замени их на массивы char фиксированной длины или преобразуй перед записью в обычные строки с фиксированной длиной.
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
20.05.2014, 17:47  [ТС]     Ошибка при удаление из бинарного файла #7
"Преобразуй перед записью в обычные строки с фиксированной длиной" - это как? Перекопировать в массив char? И надо ли, если я записывал туда данные тоже через string?
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
20.05.2014, 17:51     Ошибка при удаление из бинарного файла #8
Ты записываешь уже не верно. Поэтому и чтение у тебя не будет работать.
Ну да, копировать в char или сразу в структуре использовать char. Главное, чтобы длина была точная.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2014, 17:54     Ошибка при удаление из бинарного файла
Еще ссылки по теме:

C++ Удаление записей из бинарного файла
C++ Удаление бинарного файла
Ошибка при реализации бинарного дерева: error C1075: конец файла обнаружен ранее, чем левая фигурная скобка C++

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

Или воспользуйтесь поиском по форуму:
Shiman_Gleb
0 / 0 / 0
Регистрация: 15.05.2014
Сообщений: 51
20.05.2014, 17:54  [ТС]     Ошибка при удаление из бинарного файла #9
Сейчас попробую...
Yandex
Объявления
20.05.2014, 17:54     Ошибка при удаление из бинарного файла
Ответ Создать тему
Опции темы

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