Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 74
1

Использование неинициализированной памяти

19.05.2019, 14:45. Показов 5068. Ответов 2

В строке 120 вылезает ошибка "Использование неинициализированной памяти *st", возможно из-за этого в строке 73 выводится не то, что было изначально. Как исправить?
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
#include <string.h>
#include <iostream>
#include <conio.h>
#include <fstream>
#include <time.h>
#include <locale>
 
using namespace std;
 
struct student {
    char fio[100];
    char data[11];
    float arr[8];
    int c;
    int g;
};
 
void input(student);
void process(student, student*);
void file(student, student*, int);
 
void input(student one)
{
    ofstream fout;
    fout.open("input.2.txt");
    ifstream fin;
    cout << "Введите ФИО: " ;
    cin.getline(one.fio, 100);
    for (int i = 0; i <100; i++)
    {
 
        fout << one.fio[i];
    }
    cout << endl;
    cout << "Введите дату рождения: " ;
    cin.getline(one.data, 11);
    for (int i = 0; i < 11; i++)
    {
        fout << one.data[i];
    }
    cout << endl;
    cout << "Введите средние оценки за семестр: " ;
    cout << endl;
    for (int i = 0; i < 8; i++)
    {
        cout << "За " << i+1 << " семестр " ;
        cin >> one.arr[i];
        fout << one.arr[i];
    }
    cout << endl;
    cout << "Введите курс: " ;
    cin >> one.c;
    fout << one.c;
    cout << endl;
    cout << "Введите группу: " ;
    cin >> one.g;
    fout << one.g;
    cout << endl;
}
 
 
void process(student one, student* st)
{
    int k;  int b = 0; double e = 0.00001;
    cout << "Выберите одного студента и укажите его номер: ";
    cin >> k;
    cout << endl;
    student two = st[k-1];
    for (int i = 0; i < 8; i++)
    {
        if (two.arr[i] - 2.0 <= e)
            b++;
        cout << two.arr[i];
    }
    if (b==0) cout << "У студента номер "<< k << " задолжностей нет"<<endl;
        else cout << "У студента номер " << k << " задолжности есть"<<endl;
}
 
void file (student one, student* st, int n)
{
    ifstream fin;
    fin.open("C:\\Users\\User\\Desktop\\input2.2.txt");
    for (int l = 0; l < n; l++)
    {
        fin.getline(one.fio, 100);
        cout << "ФИО: " << one.fio;
        cout << endl;
        fin.getline(one.data, 11);
        cout << "Дата рождения: " << one.data;
        cout << endl;
        for (int i = 0; i < 8; i++)
        {
            fin >> one.arr[i];
            cout << "За " << i + 1 << " семестр " << one.arr[i] << endl;
        }
        cout << endl;
        fin >> one.c;
        cout << "Курс: "<< one.c;
        cout << endl;
        fin >> one.g;
        cout << "Группа: "<<one.g;
        cout << endl;
    }
    cout << endl;
    fin.close();
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    int ans; int n; 
    cout << "Создать новый файл?(1-Да/0-Нет) ";
    cin >> ans;
    cout << "Введите количество студентов: ";
    cin >> n;
    student* st = new student[n];
    for (int i = 0; i < n; i++)
    {
        student one = st[i];
        cin.get();
        cout << "Студент номер " << i + 1 << ": ";
        cout << endl;
        if (ans == 1)
        {
            input(one);
            process(one, st);
        }
        else
        {
            file(one, st, n);
            process(one, st);
        }
    }
    delete[] st;
    _getch;
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2019, 14:45
Ответы с готовыми решениями:

Использование неинициализированной памяти
Пытаюсь написать эту программу, на данный момент выдает ошибку &quot;Использование неинициализированной...

использование неинициализированной памяти c++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;vector&gt; #include &lt;cstring&gt;...

Использование неинициализированной памяти
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;fstream&gt; using namespace std; bool used; ...

Использование неинициализированной памяти dword
#include &quot;iostream&quot; #include &quot;stdio.h&quot; #include &quot;string.h&quot; #include &quot;windows.h&quot; using...

2
4684 / 2513 / 1044
Регистрация: 07.02.2019
Сообщений: 6,540
19.05.2019, 14:52 2
Цитата Сообщение от chermalina Посмотреть сообщение
В строке 120 вылезает ошибка "Использование неинициализированной памяти *st"
Ну так не нужно использовать неинициализированную память. В чем смысл выделить память, а потом копировать её в переменную one?

Добавлено через 39 секунд
И кстате ваша структура так не скопируется
1
0 / 0 / 0
Регистрация: 21.04.2019
Сообщений: 74
19.05.2019, 16:18  [ТС] 3
все равно результат не тот...
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
#include <string.h>
#include <iostream>
#include <conio.h>
#include <fstream>
#include <time.h>
#include <locale>
 
using namespace std;
 
struct student {
    char fio[100];
    char data[11];
    float arr[8];
    int c;
    int g;
};
 
void input(student*, int);
void process(student*);
void file(student*, int, int);
 
void input(student* st, int i)
{
    ofstream fout;
    fout.open("input.2.txt");
    ifstream fin;
    cout << "Введите ФИО: " ;
    cin.getline(st[i].fio, 100);
    for (int i = 0; i <100; i++)
    {
 
        fout << st[i].fio[i];
    }
    cout << endl;
    cout << "Введите дату рождения: " ;
    cin.getline(st[i].data, 11);
    for (int i = 0; i < 11; i++)
    {
        fout << st[i].data[i];
    }
    cout << endl;
    cout << "Введите средние оценки за семестр: " ;
    cout << endl;
    for (int i = 0; i < 8; i++)
    {
        cout << "За " << i+1 << " семестр " ;
        cin >> st[i].arr[i];
        fout << st[i].arr[i];
    }
    cout << endl;
    cout << "Введите курс: " ;
    cin >> st[i].c;
    fout << st[i].c;
    cout << endl;
    cout << "Введите группу: " ;
    cin >> st[i].g;
    fout << st[i].g;
    cout << endl;
}
 
 
void process(student* st)
{
    int k;  int b = 0; double e = 0.00001;
    cout << "Выберите одного студента и укажите его номер: ";
    cin >> k;
    cout << endl;
    for (int i = 0; i < 8; i++)
    {
        if (st[k - 1].arr[i] - 2.0 <= e)
            b++;
        cout << st[k - 1].arr[i];
    }
    if (b==0) cout << "У студента номер "<< k << " задолжностей нет"<<endl;
        else cout << "У студента номер " << k << " задолжности есть"<<endl;
}
 
void file (student* st, int n, int i)
{
    ifstream fin;
    fin.open("C:\\Users\\User\\Desktop\\input2.2.txt");
    for (int l = 0; l < n; l++)
    {
        fin.getline(st[i].fio, 100);
        cout << "ФИО: " << st[i].fio;
        cout << endl;
        fin.getline(st[i].data, 11);
        cout << "Дата рождения: " << st[i].data;
        cout << endl;
        for (int i = 0; i < 8; i++)
        {
            fin >> st[i].arr[i];
            cout << "За " << i + 1 << " семестр " << st[i].arr[i] << endl;
        }
        cout << endl;
        fin >> st[i].c;
        cout << "Курс: "<< st[i].c;
        cout << endl;
        fin >> st[i].g;
        cout << "Группа: "<< st[i].g;
        cout << endl;
    }
    cout << endl;
    fin.close();
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    int ans; int n; 
    cout << "Создать новый файл?(1-Да/0-Нет) ";
    cin >> ans;
    cout << "Введите количество студентов: ";
    cin >> n;
    student* st = new student[n];
    for (int i = 0; i < n; i++)
    {
        cin.get();
        cout << "Студент номер " << i + 1 << ": ";
        cout << endl;
        if (ans == 1)
        {
            input(st, i);
            process(st);
        }
        else
        {
            file(st, n, i);
            process(st);
        }
    }
    delete[] st;
    _getch;
    return 0;
}
Добавлено через 1 час 18 минут
ладно, с этим разобралась, но теперь из файла для первого студента выводит все правильно, а у второго что-то непонятное...
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
#include <string.h>
#include <iostream>
#include <conio.h>
#include <fstream>
#include <time.h>
#include <locale>
 
using namespace std;
 
struct student {
    char fio[100];
    char data[11];
    float arr[8];
    int c;
    int g;
};
 
void input(student*, int);
void process(student*);
void file(student*, int);
 
void input(student* st, int n)
{
    for (int i = 0; i < n; i++)
    {
        cout << "Студент номер " << i + 1 << ": ";
        cout << endl;
        ofstream fout;
        cin.get();
        fout.open("input.2.txt");
        ifstream fin;
        cout << "Введите ФИО: ";
        cin.getline(st[i].fio, 100);
        for (int i = 0; i < 100; i++)
        {
 
            fout << st[i].fio[i];
        }
        cout << endl;
        cout << "Введите дату рождения: ";
        cin.getline(st[i].data, 11);
        for (int i = 0; i < 11; i++)
        {
            fout << st[i].data[i];
        }
        cout << endl;
        cout << "Введите средние оценки за семестр: ";
        cout << endl;
        for (int j = 0; j < 8; j++)
        {
            cout << "За " << i + 1 << " семестр ";
            cin >> st[i].arr[j];
            fout << st[i].arr[j];
        }
        cout << endl;
        cout << "Введите курс: ";
        cin >> st[i].c;
        fout << st[i].c;
        cout << endl;
        cout << "Введите группу: ";
        cin >> st[i].g;
        fout << st[i].g;
        cout << endl;
    }
}
 
 
void process(student* st)
{
    int b = 0; double e = 0.00001; int k;
    cout << "Выберите одного студента и укажите его номер: ";
    cin >> k;
    cout << endl;
    for (int j = 0; j < 8; j++)
    {
        if (st[k - 1].arr[j] - 2.0 <= e)
            b++;
        cout << st[k - 1].arr[j];
    }
    if (b==0) cout << "У студента номер "<< k << " задолжностей нет"<<endl;
        else cout << "У студента номер " << k << " задолжности есть"<<endl;
}
 
void file (student* st, int n)
{
    ifstream fin;
    fin.get();
    fin.open("C:\\Users\\User\\Desktop\\input2.2.txt");
    for (int i = 0; i < n; i++)
    {
        cout << "Студент номер " << i + 1 << ": ";
        cout << endl;
        fin.getline(st[i].fio, 100);
        cout << "ФИО: " << st[i].fio << endl;
        cout << endl;
        fin.getline(st[i].data, 11);
        cout << "Дата рождения: " << st[i].data << endl;
        cout << endl;
        for (int j = 0; j < 8; j++)
        {
            fin >> st[i].arr[j];
            cout << "За " << i + 1 << " семестр " << st[i].arr[j] << endl;
        }
        cout << endl;
        fin >> st[i].c;
        cout << "Курс: "<< st[i].c<<endl;
        cout << endl;
        fin >> st[i].g;
        cout << "Группа: "<< st[i].g << endl;
        cout << endl;
    }
    cout << endl;
    fin.close();
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    
    int ans; int n;
    cout << "Создать новый файл?(1-Да/0-Нет) ";
    cin >> ans;
    cout << "Введите количество студентов: ";
    cin >> n;
    student* st = new student[n];
    if (ans == 1)
    {
        input(st, n);
    }
    else
    {
        file(st, n);
    }
    process(st);
    delete[] st;
    _getch;
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2019, 16:18

Уйти от глобальной переменной (получил "использование неинициализированной памяти")
Требовалось уйти от использования глобальной переменной max И сделать массив статическим ...

Использование неинициализированной переменной
Товарищи! Столкнулся с таким феноменом: обычно если объявленную, но неинициализированную переменную...

Использование неинициализированной локальной переменной
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; ...

Выдается сообщение о том, что возможно использование неинициализированной переменной
Помогите разобраться. Вроде все правильно, а выдает ошибку: maybe used uninitialized in this...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru