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

Нарушение прав доступа при записи по адресу - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
16.06.2014, 23:24     Нарушение прав доступа при записи по адресу #1
Будьте добры подскажите, есть занятная функция которая подгружает из файлика данные,

Необработанное исключение по адресу 0x50C6BBC2 (msvcr120d.dll) в ТестЗадание.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00FBDBC0.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void AddTypesFromFile()
    {
        FILE * file;
        file = fopen("CarTypes.txt", "r");
        
 
        rewind(file);
        char tmp = 0;
        for (int i = 1; i < 10;i++)
        {
            
            fscanf(file, "%s\n", "%i ", "%i ", "%i ", "%i ", "%i ", "%i ", "%i\n", tmp, TruckCar[i].CargoCap, TruckCar[i].Loong, TruckCar[i].Wide, TruckCar[i].Hight, TruckCar[i].MaxCargoWi, TruckCar[i].MaxCargoHi, TypeTruck[i].countType);
            tmp = TypeTruck[i].type;
        } 
 
 
        fclose(file);
    }
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
 
 
using std::cout;
 
//Тут мы опишем "характеристики" грузовых автомобилей
/*
struct CarType 
{
    std::string type; //тип например А1, А2...
    int count; // кол-ство автомобилей заданого типа
    int CargoCap; //грузоподьемность , kg
    int loong; // Длина ,sm
    int Wide; // Ширина, sm
    int Hight; //Высота, sm
    int MaxCargoHi; //Максимальная высота груза
    int MaxCargoWi; //Максимальная ширина груза
    int FullMass; //  Общая масса
};
 
struct RampType
{
    int id; // Номер рампы в базе (системно задается автоматически)
    int RampWide; // Ширина рампы
    int CargoSqwLevel; //площадка для выгрузки грузов находится на уровне ... meters
    int WindowHi; //Высота окна выгрузки см
    int WindowWi; //Ширина окна выгрузки см
    int minRampWideCapac;
    int maxRampWideCapac; //
    int maxMass; // Максимальная масса принимаемого на рампе транспорта
};
*/
 
    class Car  // прародитель
    {
    public:
        Car()
        {
            
            
            CargoCap = 0;
            Loong = 0;
            Wide = 0;
            Hight = 0;
            MaxCargoHi = 0;
            MaxCargoWi = 0;
                    
            
        }
        Car(int CargoCap, int Loong, int Wide, int Hight, int MaxCargoHi,int MaxCargoWi)
        {
            Car::CargoCap =        CargoCap;
            Car::Loong =           Loong;
            Car::Wide =            Wide;
            Car::Hight =           Hight;
            Car::MaxCargoHi =      MaxCargoHi;
            Car::MaxCargoWi =      MaxCargoWi;
        }
        
        int CargoCap; //грузоподьемность , kg
        int Loong; // Длина ,sm
        int Wide; // Ширина, sm
        int Hight; //Высота, sm
        int MaxCargoHi; //Максимальная высота груза
        int MaxCargoWi; //Максимальная ширина груза
    };
     
    class Type : public Car
    {
    public:
        Type()//конструктор по умолчанию
        {
            Car::CargoCap = 0;
            Car::Loong = 0 ;
            Car::Wide = 0 ;
            Car::Hight = 0;
            Car::MaxCargoHi = 0;
            Car::MaxCargoWi = 0;
            Type::type = NULL;
            Type::countType = 0;
        }
        Type(char, int);
        char type; //тип например А1, А2...
        int countType; // кол-ство автомобилей заданого типа
 
    };
    Car TruckCar[10];
    Type TypeTruck[10];
 
    
    
    void addalltypes()
    {
        
        for (int i = 0; i < 9; i++)
        {
            TruckCar[i].CargoCap = 12;
            TruckCar[i].Loong = 12;
            TruckCar[i].Wide = 12;
            TruckCar[i].Hight = 12;
            TruckCar[i].MaxCargoHi = 21;
            TruckCar[i].MaxCargoWi = 23;
            printf("%s",TypeTruck[i].type);
            TypeTruck[i].countType = 88;
            
        }
    }
    void AddTypesFromFile()
    {
        FILE * file;
        file = fopen("CarTypes.txt", "r");
         //Количество доступных типов
         //Я простой счетчик i++
 
        rewind(file);
        char tmp = 0;
        for (int i = 1; i < 10;i++)
        {
            
            fscanf(file, "%s\n", "%i ", "%i ", "%i ", "%i ", "%i ", "%i ", "%i\n", tmp, TruckCar[i].CargoCap, TruckCar[i].Loong, TruckCar[i].Wide, TruckCar[i].Hight, TruckCar[i].MaxCargoWi, TruckCar[i].MaxCargoHi, TypeTruck[i].countType);
            tmp = TypeTruck[i].type;
        } 
 
 
        fclose(file);
    }
 
    void showall()
    {
        for (int i = 0; i < 9; i++)
        {
            cout << "Тип грузового автомобиля:";  printf("%s", TypeTruck[i].type); cout << std::endl;
            cout << "Грузоподьемность, кг:"                   <<TruckCar[i].CargoCap    << std::endl;
            cout << "Длинна ТС, см:"                          <<TruckCar[i].Loong       << std::endl;
            cout << "Ширина ТС, см:"                          <<TruckCar[i].Wide        << std::endl;
            cout << "Высота ТС, см:"                          <<TruckCar[i].Hight       << std::endl;
            cout << "Максимальная ШИРИНА груза, см:"          << TruckCar[i].MaxCargoWi << std::endl;
            cout << "Максимальная ВЫСОТА груза, см:"          <<TruckCar[i].MaxCargoHi  << std::endl;
            cout << "Количество ТС, с данными хар-ками:"      << TypeTruck[i].countType << std::endl;
        }
    }
 
 
    void main()
    {
        setlocale(LC_ALL, "rus");
        
        AddTypesFromFile();
        showall();
 
        system("pause");
    }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IIARTEMII
20 / 20 / 3
Регистрация: 14.06.2012
Сообщений: 95
Завершенные тесты: 1
16.06.2014, 23:30     Нарушение прав доступа при записи по адресу #2
Сразу хотелось бы спросить в силу лени: отладку делали? на какой строчке конкретно ругается? ускорит решение проблемы в сотни раз

Добавлено через 3 минуты
fscanf посмотрите, неверно параметры передаёте, там указатель требуется, а вы непосредственно значение кладёте
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
17.06.2014, 16:11  [ТС]     Нарушение прав доступа при записи по адресу #3
IIARTEMII, Так точно отладку делал, на сколько ее понимаю(понимаю мало)

Короче:


Первый этап обработки исключения по адресу 0x5198BBC2 (msvcr120d.dll) в ТестЗадание.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00FCDCA4.
Необработанное исключение по адресу 0x5198BBC2 (msvcr120d.dll) в ТестЗадание.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0x00FCDCA4.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,154
Завершенные тесты: 1
17.06.2014, 16:20     Нарушение прав доступа при записи по адресу #4
C++
1
2
3
4
5
6
7
8
char tmp[256];
for (int i = 1; i < 10;i++)
{
         fscanf(file, "%s\n", "%i ", "%i ", "%i ", "%i ", "%i ", "%i ", "%i\n", tmp,  
             &TruckCar[i].CargoCap, &TruckCar[i].Loong, &TruckCar[i].Wide, &TruckCar[i].Hight, 
             &TruckCar[i].MaxCargoWi, &TruckCar[i].MaxCargoHi, &TypeTruck[i].countType);
        strcpy(TypeTruck[i].type,tmp);
}
И еще в объявлении класса
C++
1
 char type[256]; //тип например А1, А2...
Outmee
 Аватар для Outmee
2 / 2 / 0
Регистрация: 26.01.2014
Сообщений: 56
17.06.2014, 22:49  [ТС]     Нарушение прав доступа при записи по адресу #5
zss, с эмперсантами я уже сам наковырял, а за создание tmp - Благодарю, мог бы но бился бы как олень рогами об пол но не заводил лишнюю переменную
Yandex
Объявления
17.06.2014, 22:49     Нарушение прав доступа при записи по адресу
Ответ Создать тему
Опции темы

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