Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
1

Проблемы с памятью

15.04.2013, 09:55. Показов 1115. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Программа создает династическую двумерную матрицу. Не могу найти где происходит утечка памяти. Если несколько раз вводить большие размеры матрицы, то не происходит полная очистка памяти и программа просто закрывается. Помогите найти утечку и очищать память корректно.

Often.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef _OFTEN_H_
#define _OFTEN_H_
 
bool Ioresult(std::istream &stream); //Функция проверки правильности ввода c клавиатуры;
bool Ioresult(std::ifstream &stream); //Функция проверки правильности ввода из файла;
 
void Сlean(long **&meas, long size_y, long size_x); //Функция очищает выделенную память под матрицу;
void Init(long **&meas, long size_y, long size_x); //Функция выделяет память для матрицы C размеными Size_y на Size_x;
long Sing(long **&meas, long size_y, long size_x); //Функция возвращает строку с максимальной суммой модулей элементов;
void Save(long **&meas, long size_y, long size_x, std::ofstream &stream, char *&name); //Функция сохранения матрицы в файл;
void Open(long **&meas, long &size_y, long &size_x, std::ifstream &stream, char *&name); //Функция для заполнения из файла;
 
#endif
Often.cpp
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
#include <iostream> //istream;
#include <fstream> //ifstream, ofstream;
#include <stdlib.h> //abs(), system();
 
#include "Often.h"
 
bool Ioresult(std::ifstream &stream)
{   
    if(stream.fail())
    {
        stream.clear(); stream.sync();
        return true;
    }
    return false;
}
 
bool Ioresult(std::istream &stream)
{
    if(stream.rdbuf()->in_avail() != 1)
    {
        stream.clear(); stream.sync();
        return true;
    }
    stream.sync();
    return false;
}
 
void Сlean(long **&meas, long size_y, long size_x)
{
    if(!meas) throw 1; //Ошибка, память не выделена;
    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;;
    for(long j = 0; j < size_y; j++) delete [] meas[j];
    delete [] meas;
    meas = 0;
}
 
void Init(long **&meas, long size_y, long size_x)
{
    if(meas) throw 2; //Ошибка, память уже выделена;
    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
    meas = new long*[size_y];
    for(long j = 0; j < size_y; j++) meas[j] = new long[size_x];
    for(long j = 0; j < size_y; j++)
        for(long i = 0; i < size_x; i++) meas[j][i] = 0;
}
 
long Sing(long **&meas, long size_y, long size_x)
{
    if(!meas) throw 1; //Ошибка, память не выделена;
    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
    for(long j = 0; j < size_y; j++) if(!meas[j]) throw 5; //Ошибка, память выделена не под всю матрицу;
    long Max = 0, Index = -1, Sum;
    bool Soot;
    for(int j = 0; j < size_y; j++)
    {
        Sum = 0;
        Soot = true;
        for(long i = 0; i < size_x; i++)
        {
            Sum = abs(meas[j][i]);
            if(!(meas[j][i] % 2)) Soot = false;
        }
        if(Soot && Max < Sum)
        {
            Max = Sum;
            Index = j;
        }
    }
    if(Index == -1) throw 6; //Ошибка, не найдено не одной строки удовлетворяющих требованиям;
    return Index;
}
 
void Save(long **&meas, long size_y, long size_x, std::ofstream &stream, char *&name)
{
    if(!meas) throw 1; //Ошибка, память не выделена;
    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
    for(long j = 0; j < size_y; j++) if(!meas[j]) throw 5; //Ошибка, память выделена не под всю матрицу;
    stream.open(name, std::ios_base::out);
    if (!stream.is_open()) throw 7; //Ошибка, не удалось открыть файл для записи;
    stream << size_y << ' ' << size_x << '\n';
    for(long j = 0; j < size_y; j++)
    {
        for(long i = 0; i < size_x; i++)
        {
            stream << meas[j][i];
            if(i < size_x - 1) stream << ' ';
        }
        if(j < size_y - 1) stream << '\n';
    }
    stream.close();
}
 
void Open(long **&meas, long &size_y, long &size_x, std::ifstream &stream, char *&name)
{
    if(meas) throw 2; //Ошибка, память уже выделена;
    stream.open(name, std::ios_base::in);
    if (!stream.is_open()) throw 8; //Ошибка, не удалось открыть файл для чтения;
    if(stream.eof())
    {
        stream.close();
        throw 9; //Ошибка, файл пуст;
    }
    stream >> size_y;
    if(Ioresult(stream))
    {
        stream.close();
        throw 10; //Ошибка, не удалось считать содерживое файла;
    }
    if(stream.eof())
    {
        stream.close();
        throw 11; //Ошибка, не хватает данных в файле;
    }
    stream >> size_x;
    if(Ioresult(stream))
    {
        stream.close();
        throw 10; //Ошибка, не удалось считать содерживое файла;
    }
    Init(meas, size_y, size_x);
    long j = 0, i = 0;
    while(!stream.eof() && j != size_y)
    {
        stream >> meas[j][i];
        if(Ioresult(stream))
        {
            Сlean(meas, size_y, size_x);
            stream.close();
            throw 10; //Ошибка, не удалось считать содерживое файла;
        }
        i++;
        if(i == size_x)
        {
            j++;
            i = 0;
        }
    }
    if(j != size_y)
    {
        Сlean(meas, size_y, size_x);
        stream.close();
        throw 11; //Ошибка, не хватает данных в файле;
    }
    if(stream.rdbuf()->in_avail())
    {
        Сlean(meas, size_y, size_x);
        stream.close();
        throw 12; //Ошибка, в файле содержаться лишний данные;
    }
    stream.close();
}
Main.cpp
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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#include <iostream> //istream;
#include <fstream> //ifstream, ofstream;
#include <stdlib.h> //abs(), system();
#include <conio.h> //getch();
#include <stdio.h> //gets();
#include <time.h> //time();
#include <new> //bad_alloc
 
#include "Often.h"
 
using namespace std;
 
void PrintR(int x)
{
    switch(x)
    {
    case 1:
        cout << "Ошибка, память не выделена. ";
        break;
    case 2:
        cout << "Ошибка, память уже выделена. ";
        break;
    case 3:
        cout << "Ошибка, неправильные размеры. ";
        break;
    case 5:
        cout << "Ошибка, память выделена не под всю матрицу. ";
        break;
    case 6:
        cout << "Ошибка, не найдено не одной строки удовлетворяющих требованиям. ";
        break;
    case 7:
        cout << "Ошибка, не удалось открыть файл для записи. ";
        break;
    case 8:
        cout << "Ошибка, не удалось открыть файл для чтения. ";
        break;
    case 9:
        cout << "Ошибка, файл пуст. ";
        break;
    case 10:
        cout << "Ошибка, не удалось считать содерживое файла. ";
        break;
    case 11:
        cout << "Ошибка, не хватает данных в файле. ";
        break;
    case 12:
        cout << "Ошибка, в файле содержаться лишний данные. ";
        break;
    default:
        cout << "Неизвестная ошибка. ";
    }
}
 
void main(int argc, char *argv[])
{
    srand(time(NULL)); //Для генераций случайных чисел
    setlocale(LC_ALL, "Russian");   
 
    long **meas = 0;
    long size_y, size_x;
    char *name = new char[261];
    ifstream in;
    ofstream out;
 
    if(argc == 2)
    {
        try
        {
            Open(meas, size_y, size_x, in, argv[1]);
            system("cls");
            cout << "Матрица успешно считана из файл. ";
            system("pause");
        }
        catch(int x)
        {
            system("cls");
            PrintR(x);
            system("pause");
        }
        catch(bad_alloc)
        {
            if(!meas) Сlean(meas, size_y, size_x);
            system("cls");
            cout << "Нехватило памяти. ";
            system("pause");
        }
    }
    
    bool ext = true;
    char ch;
    int item = 1;
 
    do{
        system("cls");
        switch(item){
        case 1:
            cout << "1.Создать.\n";
            cout << "2.Просмотреть.\n";
            cout << "3.Обработать.\n";
            cout << "4.Сохранить в файл.\n";
            cout << "5.Выход.\n";
            break;
        case 2:
            cout << "1.С клавиатуры.\n";
            cout << "2.Случайным образом.\n";
            cout << "3.Заполнить из файла.\n";
            cout << "4.Назад.\n";
            break;
        }
 
        ch = getch();
 
        try
        {
            switch(item)
            {
            case 1:
                switch(ch)
                {
                case '1':
                    item = 2;
                    break;
                case '2':
                    if(!meas) throw 1; //Ошибка, память не выделена;
                    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
                    for(long j = 0; j < size_y; j++) if(!meas[j]) throw 5; //Ошибка, память выделена не под всю матрицу;
                    system("cls");
                    cout << "Элементы матрица:\n";
                    for(long j = 0; j < size_y; j++)
                    {
                        for(long i = 0; i < size_x; i++)
                        {
                            cout << meas[j][i];
                            if(i < size_x - 1) cout << ' ';
                        }
                        if(j < size_y - 1) cout << '\n';
                    }
                    system("pause");
                    break;
                case '3':
                    if(!meas) throw 1; //Ошибка, память не выделена;
                    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
                    for(long j = 0; j < size_y; j++) if(!meas[j]) throw 5; //Ошибка, память выделена не под всю матрицу;
                    system("cls");
                    cout << "Номер строки: " << Sing(meas, size_y, size_x) << '\n';
                    system("pause");
                    break;
                case '4':
                    if(!meas) throw 1; //Ошибка, память не выделена;
                    if(size_y < 1 || size_x < 1) throw 3; //Ошибка, неправильные размеры;
                    for(long j = 0; j < size_y; j++) if(!meas[j]) throw 5; //Ошибка, память выделена не под всю матрицу;
                    system("cls");
                    cout << "Введите имя файла: ";
                    gets(name);
                    Save(meas, size_y, size_x, out, name);
                    system("cls");
                    cout << "Матрица успешно записана в файл. ";
                    system("pause");
                    break;
                case '5':
                    ext = false;
                    if(meas) Сlean(meas, size_y, size_x);
                    delete []name;
                    break;
                }
                break;
            case 2:
                switch(ch)
                {
                case '1':
                    if(meas) Сlean(meas, size_y, size_x);
                    do{
                        system("cls");
                        cout << "Введите количество строк матрицы: ";
                        cin >> size_y;
                    }while(Ioresult(cin));
                    do{
                        system("cls");
                        cout << "Введите количество столбцов матрицы: ";
                        cin >> size_x;
                    }while(Ioresult(cin));
                    Init(meas, size_y, size_x);
                    for(long j = 0; j < size_y; j++)
                        for(long i = 0; i < size_x; i++)
                            do{
                                system("cls");
                                cout << "Введите C[" << j << "][" << i << "]: ";
                                cin >> meas[j][i];
                            }while(Ioresult(cin));
                    system("cls");
                    cout << "Матрица успешно создана. ";
                    system("pause");
                    break;
                case '2':
                    if(meas) Сlean(meas, size_y, size_x);
                    do{
                        system("cls");
                        cout << "Введите количество строк матрицы: ";
                        cin >> size_y;
                    }while(Ioresult(cin));
                    do{
                        system("cls");
                        cout << "Введите количество столбцов матрицы: ";
                        cin >> size_x;
                    }while(Ioresult(cin));
                    Init(meas, size_y, size_x);
                    for(long j = 0; j < size_y; j++)
                        for(long i = 0; i < size_x; i++) meas[j][i] = rand();
                    system("cls");
                    cout << "Матрица успешно создана. ";
                    system("pause");
                    break;
                case '3':
                    if(meas) Сlean(meas, size_y, size_x);
                    system("cls");
                    cout << "Введите имя файла: ";
                    gets(name);
                    Open(meas, size_y, size_x, in, name);
                    system("cls");
                    cout << "Матрица успешно считана из файл. ";
                    system("pause");
                    break;
                case '4':
                    item = 1;
                    break;
                }
                break;
            }
 
        }
        catch(int x)
        {
            system("cls");
            PrintR(x);
            system("pause");
        }
        catch(bad_alloc)
        {
            if(!meas) Сlean(meas, size_y, size_x);
            system("cls");
            cout << "Нехватило памяти. ";
            system("pause");
        }
    }while(ext);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2013, 09:55
Ответы с готовыми решениями:

проблемы с памятью....
с алгоритмом вроде все нормально но вот происходит такая вещи при определенном действии выдается...

Сортировки. Проблемы с памятью
#include &lt;time.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; unsigned int...

Проблемы с динамической памятью
Доброе утро. Подскажите, пожалуйста, почему, когда я очищаю память (free(str)), появляется ошибка...

Проблемы с памятью при сортировке
И так, случилась такая проблема, при запуске программы после того как ввожу N, появляется ошибка...

18
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.04.2013, 10:58 2
Wanee, ознакомьтесь в с концепцией RAII для исключения утечек памяти. И не используйте исключения типа int. Это плохой тон. Заведите специальный класс.
Искать утечки в Вашем коде слишком утомительно в силу ужасной кривизны. Проще переписать.
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 13:52  [ТС] 3
Tulosba, да логичней использовать свой тип, но по заданию я нельзя пользоваться классами, так что пришлось использовать int.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.04.2013, 13:55 4
Цитата Сообщение от Wanee Посмотреть сообщение
но по заданию я нельзя пользоваться классами
Что за садистское задание? Не пользоваться классами в программе на С++.
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 14:19 5
thinking

Добавлено через 21 минуту
Код попахивает, но ...
1. Кто сказал что у Вас лик?
2. матрицу каких размеров Вы аллоцируете?
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 14:22  [ТС] 6
Tulosba, одно из требований "8. Программы реализуются на языке С++ БЕЗ использования классов."
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 14:24 7
Используйте функции это раз. Можно енумчик?, нет -> дефайны, это два. Три у вас ошибка на bad alloc !means и Вы не переходите в режим 1 (и примите его по конст реф.)

std::ifstream &stream и std::istream &stream имеют один интерфейс, уберите дублирование кода.
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.04.2013, 14:41 8
Цитата Сообщение от Wanee Посмотреть сообщение
"8. Программы реализуются на языке С++ БЕЗ использования классов."
Можно всех нае... обмануть. Использовать struct
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 14:45  [ТС] 9
Tulosba, тогда как задать значение переменной в struct без конструктора?
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 14:54 10
C++
1
2
struct Point { int x, y; };
Point point = { 0, 0 };
0
390 / 365 / 111
Регистрация: 03.02.2013
Сообщений: 1,120
15.04.2013, 14:59 11
тогда как задать значение переменной в struct без конструктора?
а с чего вы взяли, что у struct нет конструктора? у неё есть всё, что есть у класса (даже наследование)
разница только в одном - class по умолчанию начинает свои методы как private а struct как public
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.04.2013, 15:00 12
Wanee, вся разница между class и struct в c++ в том, что для первого по умолчанию используется private доступ, а для второго - public. Т.е. для структуры можно задавать всё то, что можно для класса, конструктор в том числе.
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 15:02  [ТС] 13
stima, а как тогда использовать её в throw?

Добавлено через 55 секунд
Tulosba, это да, но если я буду использовать функций и конструкторы в структуре то задание не примут.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.04.2013, 15:04 14
Wanee, полный текст задания можно узреть?
0
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 15:09  [ТС] 15
ТРЕБОВАНИЯ К ПРОГРАММАМ

1. Необходимо точно выполнять условия задач, при сомнениях --
консультироваться с преподавателем. Программы представляются в
исходных текстах.

2. Программы должны быть написаны самостоятельно.

3. Текст программы должен быть откомментирован. В заголовке указать
имя автора, группу, формулировку задания. Имена переменных, функций и
проч. должны иметь осмысленные имена. Желательно объявление переменной
снабжать комментарием о ее назначении.

4. Следует структурировать программу, разбивая ее на (относительно)
независимые части. Осуждается порочная практика размещения многих
операторов в одной строке.

5. Длинные программы (свыше 200 строк) следует разбивать на несколько
файлов и создавать проект. Это обязательное требование, так как
умение работать с проектами квалифицированному программисту
необходимо.

6. Интерфейс программы должен быть достаточно удобен
для пользователя. Программа должна быть снабжена удобным интерфейсом
на базе меню.

7. Программа должна компилироваться без ошибок и предупреждений при
всех включенных сообщениях компилятора.

8. Программы реализуются на языке С++ БЕЗ использования классов.

9. Программы должны быть хорошо протестированы перед сдачей.

10. Сроки сдачи: 1-я программа - до 15 октября,
2-я программа - до 7 ноября,
3-я программа - до 1 декабря,
4-я программа - на зачетной неделе

11. См. также отдельные требования в разделах.

ТРЕБОВАНИЯ к задачам данного раздела:

1. Программа должна осуществлять анализ командной строки. Если при запуске
программе переданы параметры, то первый из них - имя файла, из которого
следует брать исходные данные. Если параметры не переданы, то ввод
осуществляется из стандартного потока ввода.

2. Результат должен представлять собой функцию (отличную от функции main() ),
решающую поставленную задачу. Исходные данные (как правила, матрица и ее
размеры) передаются в эту функцию в качестве параметров.
Функция main() должна быть демонстрацией возможностей написанной программы.
При необходимости можно вводить вспомогательные функции.

и само задание:

16. Среди тех строк целочисленной матрицы, которые содержат только
нечетные элементы, найти строку с максимальной суммой модулей элементов.
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 15:11 16
Во-первых использовать методы в структуре). Во-вторых забейте на классы и структуры. Для решения вашей задачи они Вам не надо.

Разбейте код, на логические единицы(функции) - у Вас их как минимум 2 (Ваш item 1/2). Используйте возврат значения, как определение удачи/неуспеха, так-как использование исключений в Вашем коде это оверхед (у вас нет возврата по стеку больше чем на фрейм).

Заведите хедер с дефайнами о ошибках и туда же функцию ошибка_число->ошибка_строка.
Ваш код примет вид
C++
1
2
3
4
5
6
7
8
9
typedef unsigned long ret_type;
//псевдо
ret_type check_ptr(void* ptr)
{
    if (ptr)
       return RET_SUCCESS;
   
    return RET_FAIL;
}
Добавлено через 45 секунд
Цитата Сообщение от Wanee Посмотреть сообщение
Осуждается порочная практика размещения многих
операторов в одной строке
Об стену)
1
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 15:12  [ТС] 17
stima, то есть думаете лучше все таки создать структуру и писать как то так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct exBase{
    int x;
};
 
//...
 
if(/*условия*/){
    exBase p = {1};
    throw p;
}
 
//...
 
catch(exBase &p){
    cout << p.x;
}
0
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
15.04.2013, 15:28 18
Цитата Сообщение от Wanee Посмотреть сообщение
Желательно объявление переменной
снабжать комментарием о ее назначении.
Если имя переменной не говорит о ее назначении, то возможно стоит пересмотреть имя?

Добавлено через 9 минут
В догонку раз.

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
#ifndef _ERRORS_H
#define _ERRORS_H
 
#define ER_BAD_ALLOC
#define ER_OPEN_FILE
 
typedef unsigned int ret_type;
 
std::string error_to_string(ret_type error)
  {
    switch(error)
      {
    case ER_BAD_ALLOC:  return "Ошибка, память не выделена.";
    case 2:  return "Ошибка, память уже выделена.";
    case 3:  return "Ошибка, неправильные размеры.";
    case 5:  return "Ошибка, память выделена не под всю матрицу.";
    case 6:  return "Ошибка, не найдено не одной строки удовлетворяющих требованиям.";
    case ER_OPEN_FILE:  return "Ошибка, не удалось открыть файл для записи.";
    case 8:  return "Ошибка, не удалось открыть файл для чтения.";
    case 9:  return "Ошибка, файл пуст.";
    case 10: return "Ошибка, не удалось считать содерживое файла.";
    case 11: return "Ошибка, не хватает данных в файле.";
    case 12: return "Ошибка, в файле содержаться лишний данные.";
     }
 
  return "Неизвестная ошибка.";
  }
 
#endif //_ERRORS_H
Добавлено через 6 минут
Вдогонку 2.

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
//псевдо
 
show_screen_1()
 {
 int var;
 
 std::cout << "Screen one are processed" << std::endl;
 
 if (var == 1)
   do_act_1();
 else
 ...
 }
 
show_screen_2();
 
main()
{
   for ( ;; ) //inf loop
   {
     if (screan_var == 1)
        show_screen_1();
     else
        show_screen_2();
  }
}
вот как-то так.

п.с. И если препод такое не примет или скажет не по заданию, смело идите к ректору и говорите что препод такой-то не компетентен.
1
54 / 54 / 23
Регистрация: 02.02.2011
Сообщений: 436
15.04.2013, 15:44  [ТС] 19
stima, спасибо большое)
0
15.04.2013, 15:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2013, 15:44
Помогаю со студенческими работами здесь

std:bad_alloc Проблемы с памятью
Здравствуйте, проблема такая. Написал программу итерационного метода. Далее эту программу, поместил...

Проблемы с динамической памятью
Приветствую Вас. В программировании я полный чайник, делаю по методичкам и не могу разобраться с...

Проблемы с памятью
Подскажите, кто может. При использовании в данном коде Base до 1000 всё работает хорошо. При...

Проблемы с памятью
здравствуйте.я так подозреваю что начались проблемы с памятью.во первых встроенный тест памяти на...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru