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

Консольное приложение Win32 - ошибка c0000005 - C++

Восстановить пароль Регистрация
 
Quaes
Сообщений: n/a
30.03.2014, 17:10     Консольное приложение Win32 - ошибка c0000005 #1
Visual Studio 2010 express
Программа http://rghost.ru/53607442

Исходник основного файла

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
#include "stdafx.h"
 
#include <fstream>
#include <iostream>
#include <cmath>
#include <string>
 
using namespace std;
 
fstream t("t.txt");
 
ifstream in("input.txt");
ofstream out("output.txt");
 
class film {
public:
    string nazvanie;
    string time_start_string;
    string time_end_string;
    double time_start;
    double time_end;
    int nomer_zala;
    int zena_mesta[17];
    int zan_mesta[17];
 
    void get_data(){
    in>>nazvanie>>time_start_string>>time_end_string>>nomer_zala;
    for(int g=1; g<=16; g++){in>>zena_mesta[g];
    zan_mesta[g]=0;};
    };
 
    void out_data_common(){cout<<"nazvane "<<"nachalo seansa "<<"konez vsego suchego "<<" nomer zala"<<endl;;};
    void out_data_main(){cout<<nazvanie<<" "<<time_start_string<<" "<<time_end_string<<" "<<nomer_zala<<endl;};
    void out_data_zan(){
        for(int g=1; g<=17; g=g+4){
        cout<<zan_mesta[g]<<" "<<zan_mesta[g+1]<<" "<<zan_mesta[g+2]<<" "<<zan_mesta[g+3]<<endl;
        };};
        
        
    void get_int_time(){
        int k=0;
    string tmp=time_start_string;
    
    for (unsigned int g=0; g<=tmp.length(); g++){
    if (tmp[g]==':')tmp[g]='0';
    };
    t<<tmp;
    
    t.close();
    
    t.open("t.txt");
    
    t>>time_start;
    
    t.close();
    
    t.open("t.txt");
    
 
 
     tmp=time_end_string;
    for (unsigned int g=0; g<=tmp.length(); g++){
    if (tmp[g]==':')tmp[g]='0';
    };
    t<<tmp;
    t.close();
    t.open("t.txt");
    t>>time_end;
    t.close();
    t.open("t.txt");
    
    };};
 
int _tmain(int argc, _TCHAR* argv[])
{
        string temp, temp2; //++ Создаем временую строку 
    int n, k=0; //
    cin>>n; //
    film *films = new film [n]; //
    film tmp_start, tmp_end; //
    //вводим
    for(int i=0; i<=n; i++){
    films[i].get_data();
    films[i].get_int_time();
    
    };
    
    //странная точка ошибки
    
    cout<<"Что вам нужно? time/name"<<endl;
 
    cin>>temp;
    
    if (temp=="name") {
            cin>>temp2;
            films[0].out_data_common();
            for(int i=0; i<=n;i++){if (temp2==films[i].nazvanie) films[i].out_data_main(); };
    };
 
    
if (temp=="time"){
 
    cin>>tmp_end.time_start_string>>tmp_end.time_end_string;
    films[0].out_data_common();
    tmp_end.get_int_time();
    for(int i=0; i<=n;i++){if ((tmp_end.time_end<=films[i].time_end)&&(tmp_end.time_start>=films[i].time_start)) films[i].out_data_main();
};};
    cin>>n;
}
Путем проб и ошибок выяснилось, что вылет происходит после выхода из цикла ввода данных.

Добавлено через 2 минуты
А вопрос собственно такой - как это исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.03.2014, 17:25     Консольное приложение Win32 - ошибка c0000005 #2
То, что бросается в глаза:
1) открытие файла для чтения всегда проверять нужно,
2) индексация массивов начинается с 0 (for(int g=1; g<=16; g++){in>>zena_mesta[g] и т.д.).

Добавлено через 1 минуту
Цитата Сообщение от Quaes Посмотреть сообщение
что вылет происходит после выхода из цикла ввода данных.
В какой строке кода ввод?
volvo
Супер-модератор
 Аватар для volvo
21813 / 14176 / 3948
Регистрация: 22.10.2011
Сообщений: 25,050
Записей в блоге: 2
30.03.2014, 17:26     Консольное приложение Win32 - ошибка c0000005 #3
C++
82
for(int i=0; i<=n; i++){ // вылет за пределы массива
, ибо массив индексируется от 0 до n-1
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.03.2014, 17:48     Консольное приложение Win32 - ошибка c0000005 #4
Цитата Сообщение от UI Посмотреть сообщение
// вылет за пределы массива
У ТС, в коде, не везде будет вылет. В каких-то циклах он, в качестве n, использует величину на единицу меньше размера массива:
C++
1
2
3
4
5
int zena_mesta[17];
int zan_mesta[17];
...
ffor(int g=1; g<=16; g++){in>>zena_mesta[g];
    zan_mesta[g]=0;};
Здесь уже выход за границу массива:
C++
1
2
3
for(int g=1; g<=17; g=g+4){
        cout<<zan_mesta[g]<<" "<<zan_mesta[g+1]<<" "<<zan_mesta[g+2]<<" "<<zan_mesta[g+3]<<endl;
        };};
volvo
Супер-модератор
 Аватар для volvo
21813 / 14176 / 3948
Регистрация: 22.10.2011
Сообщений: 25,050
Записей в блоге: 2
30.03.2014, 23:52     Консольное приложение Win32 - ошибка c0000005 #5
alsav22, я написал в какой строке будет вылет, в 82-ой. Это и есть "цикл ввода данных"
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 00:41     Консольное приложение Win32 - ошибка c0000005 #6
UI, прошу прощения, не разобрался.
Yandex
Объявления
31.03.2014, 00:41     Консольное приложение Win32 - ошибка c0000005
Ответ Создать тему
Опции темы

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