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

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

Войти
Регистрация
Восстановить пароль
 
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
#1

Чтение/запись бинарного файла: необработаное исключение - C++

08.07.2015, 18:00. Просмотров 179. Ответов 1
Метки нет (Все метки)

Здравствуйте. Есть данный код:
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
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <iostream>
#include <string>
#include <cstdlib>
 
using namespace std;
 
struct sItem{
    string strName;
    int iWage;
    int iAmount;
};
 
int main()
{
    sItem Apple, readApple;
 
    cout << "Input name of product: ";
    getline(cin, Apple.strName);
    cout << "Input wage: ";
    cin >> Apple.iWage;
    cout << "Input amount: ";
    cin >> Apple.iAmount;
 
    FILE *fbin;
 
    if ((fbin = fopen("D:\\data.bin", "w+")) == 0)
    {
        cout << "Error! data.bin don't create!\n";
        system("pause");
        return 1;
    }
 
    fwrite(&Apple, sizeof(Apple), 1, fbin);
    fclose(fbin);
 
    if ((fbin = fopen("D:\\data.bin", "r")) == 0)
    {
        cout << "Error! data.bin don't open from read!\n";
        system("pause");
        return 1;
    }
 
    fread(&readApple, sizeof(readApple), 1, fbin);
    fclose(fbin);
 
    cout << "Name: " << readApple.strName << "\n";
    cout << "Wage: " << readApple.iWage << "\n";
    cout << "Amount: " << readApple.iAmount << "\n";
 
    cout << "\n\nWell done!\n";
    system("pause");
    return 0;
}
Программа полностью выполняется, но в момент ее завершение выскакивает данная ошибка: Unhandled exception at 0x5B4BDF62 (msvcp120d.dll) in BinFile.exe: 0xC0000005: Access violation writing location 0xFEEEFEEE.

Если заменить string на char, то проблем нету. Из того, что смог найти, есть допущение, что при закрытии программы вычищается память от всех объектов, включая оба экземпляра структуры. И в этот момент программа думает, что Apple.strName и readApple.strName ссылаются на одно и тоже. В итоге нету возможности вычистить второй string. Вот и ошибка доступа для записи. Но если это так, то разве внутренние переменные структуры не должны быть изолированы от другого кода и связаны лишь со своей структурой? (по аналогии с классами) Буду признателен за разъяснение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 18:00     Чтение/запись бинарного файла: необработаное исключение
Посмотрите здесь:

C++ Чтение из бинарного файла
C++ Необработаное исключение при выполнении gets
C++ необработаное исключение ?? оО
C++ Чтение/запись бинарного файла
C++ Чтение из бинарного файла - неведомое исключение
C++ Необработаное исключение
Запись/чтение бинарного файла C++
C++ Чтение бинарного файла
Запись и чтение из бинарного файла, объяснить поведение программы C++
Запись и чтение структуры из бинарного файла C++
C++ Чтение и запись бинарного файла
C++ Запись/чтение из бинарного файла (.bin)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,238
Завершенные тесты: 3
08.07.2015, 18:10     Чтение/запись бинарного файла: необработаное исключение #2
XpertVision, ввод-вывод в стиле Си для объектов С++ -- плохая задумка. Скорее всего, проблема в инициализации размера для стринговой строки. Деструктор пытается почистить память не в верном месте. Лучше воспользуйтесь плюсовым вариантом.
Yandex
Объявления
08.07.2015, 18:10     Чтение/запись бинарного файла: необработаное исключение
Ответ Создать тему
Опции темы

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