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

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

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

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

08.07.2015, 18:00. Просмотров 196. Ответов 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. Вот и ошибка доступа для записи. Но если это так, то разве внутренние переменные структуры не должны быть изолированы от другого кода и связаны лишь со своей структурой? (по аналогии с классами) Буду признателен за разъяснение.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2015, 18:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение/запись бинарного файла: необработаное исключение (C++):

Чтение из бинарного файла - неведомое исключение - C++
Добрый день. Помоги понять почему вылетает с ошибкой: Необработанное исключение в &quot;0x5a93ad54 (msvcp100d.dll)&quot; в &quot;test_conlose.exe&quot;:...

Чтение и запись бинарного файла - C++
Добрый день! Есть задача прочитать с бинарного файла информацию, обработать ее и записать результат в бинарный файл. #include &quot;stdafx.h&quot;...

Запись/чтение бинарного файла - C++
Здавствуйте, помогите, пожалуйста, с чтением и записью объекта в бинарный файл. Пишут, что невозможно записать в бинарный файл, если в...

Чтение/запись бинарного файла - C++
Надо проверить корректно ли работает стек. #include &quot;stack.h&quot; #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; ...

Запись и чтение структуры из бинарного файла - C++
Проблема заключается в том, что, когда идёт запись и считка с бин. файла - нормально выводит лишь первый элемент,а второй и тд. - иные...

Запись/чтение из бинарного файла (.bin) - C++
Беру информацию из текстового файла, записываю в двоичный и вывожу информацию на экран уже из двоичного файла. Если текстовый файл...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,283
Завершенные тесты: 3
08.07.2015, 18:10 #2
XpertVision, ввод-вывод в стиле Си для объектов С++ -- плохая задумка. Скорее всего, проблема в инициализации размера для стринговой строки. Деструктор пытается почистить память не в верном месте. Лучше воспользуйтесь плюсовым вариантом.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2015, 18:10
Привет! Вот еще темы с ответами:

Запись и чтение из бинарного файла, объяснить поведение программы - C++
Добрый день! Подскажите, есть код #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; int main() {

необработаное исключение ?? оО - C++
ну короче воть на скрине ошибка.. вперовй такое вижу. =&gt; я не знаю че делать Эта мини прога должна типо читать файл с матрици.. все...

Необработаное исключение - C++
создаю программу, которая будет находить на отрезке 10 точек, находящихся на одинаковом расстоянии одна от другой(но это неважно), с...

Необработаное исключение при выполнении gets - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; #include &lt;string.h&gt; typedef struct Stack { char *str; Stack...


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

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

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