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

Есть ли ошибка? - C++

Восстановить пароль Регистрация
 
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:08     Есть ли ошибка? #1
сам класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class stud_file
{
map <string, list<string> > data;
 
public:
    
    stud_file (string s)
    {
        ifstream FS; //Fs(s) ?
        FS.open(s);
        string Fam, pred;
        while(!FS.eof())
        {
            FS >> Fam;
            FS >> pred;
            data[pred].push_back(Fam);
        }
                      FS.close();
    }
 
 
};
Обращение
C++
1
    stud_file Stud("file.txt");
При запуске утекает память)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.11.2011, 23:15     Есть ли ошибка? #2
Цитата Сообщение от IcyWind Посмотреть сообщение
При запуске утекает память)
если вы сами нигде явно память не выделяете (с помощью оператора new), то утечки быть не может, деструкторы map, fstream, string, etc. обо всем позаботятся
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:20  [ТС]     Есть ли ошибка? #3
запускаю программу
открываю диспетчер задач
нахожу процесс с именем программы
и за 3-5 секунд он уже жрёт 500мб оперативки)
в текстовом файле - 4 строчки)
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
07.11.2011, 23:28     Есть ли ошибка? #4
Давайте сюда весь код.
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:29  [ТС]     Есть ли ошибка? #5
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
#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <string>
#include <fstream>
#include <list>
#include <map>
using namespace std;
 
/*
математику mas[0]
физику     mas[1]
биологию   mas[2]
химию      mas[3]
*/
 
class stud_file
{
map <string, list<string> > data;
 
public:
    
    stud_file (string s)
    {
        ifstream FS; //Fs(s) ?
        FS.open(s);
        string Fam, pred;
        while(!FS.eof())
        {
            FS >> Fam;
            FS >> pred;
            data[pred].push_back(Fam);
        }
        FS.close();
    }
 
 
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    const int n = 4;
    int mas[n] = {0,0,0,0};
 
    stud_file Stud("file.txt"); //тут виснит
 
    cout<<"†††††††††††††††††††††††††††††††††††††††††††††\n";
    cout<<"Установите нужные параметры поиска\n";
    int con = 0;
    while (con !=-1)
    {
        cout<<"†††††††††††††††††††††††††††††††††††††††††††††\n";
        cout<<"математика     => 0\n";
        cout<<"физика         => 1\n";
        cout<<"биология       => 2\n";
        cout<<"химия          => 3\n";
        cout<<"текущий выбор  => 101\n";
        cout<<"вывести список => 102\n";
        cout<<"Выйти          => -1\n";
        cin >> con;
 
        switch (con)
        {
        case 0:
        case 1:
        case 2:
        case 3:
            {
                cout<<"изучает   =>1\n";
                cout<<"неважно   =>0\n";
                cout<<"неизучает =>-1\n";
                int i;
                cin>>i;
                mas[con] = i;
                break;
            }
        case 101:
            {
                for_each(&mas[0], &mas[n], [](int x){cout<<x<<' ';});
                cout<<"\n";
            }
        }
    }
    return 0;
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.11.2011, 23:34     Есть ли ошибка? #6
C++
1
 FS.open(s.c_str());
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:36  [ТС]     Есть ли ошибка? #7
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
C++
1
 FS.open(s.c_str());
не могли бы пояснить, что это за метод и почему мой вариант - неправильный
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.11.2011, 23:42     Есть ли ошибка? #8
Цитата Сообщение от IcyWind Посмотреть сообщение
не могли бы пояснить, что это за метод и почему мой вариант - неправильный
конструктор std::ifstream принимает char *
в std::string есть метод c_str() который и возвращает строку в стиле Си, т.е. char *
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:44  [ТС]     Есть ли ошибка? #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
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
#include "stdafx.h"
#include <algorithm>
#include <iostream>
#include <string>
#include <fstream>
#include <list>
#include <map>
using namespace std;
 
/*
математику mas[0]
физику     mas[1]
биологию   mas[2]
химию      mas[3]
*/
 
class stud_file
{
map <string, list<string> > data;
 
public:
    
    stud_file (char *s)
    {
        ifstream FS; //Fs(s) ?
        FS.open(s);
        string Fam, pred;
        while(!FS.eof())
        {
            FS >> Fam;
            FS >> pred;
            data[pred].push_back(Fam);
        }
        FS.close();
    }
 
 
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0, "Rus");
    const int n = 4;
    int mas[n] = {0,0,0,0};
 
    stud_file Stud("file.txt");
 
    cout<<"†††††††††††††††††††††††††††††††††††††††††††††\n";
    cout<<"Установите нужные параметры поиска\n";
    int con = 0;
    while (con !=-1)
    {
        cout<<"†††††††††††††††††††††††††††††††††††††††††††††\n";
        cout<<"математика     => 0\n";
        cout<<"физика         => 1\n";
        cout<<"биология       => 2\n";
        cout<<"химия          => 3\n";
        cout<<"текущий выбор  => 101\n";
        cout<<"вывести список => 102\n";
        cout<<"Выйти          => -1\n";
        cin >> con;
 
        switch (con)
        {
        case 0:
        case 1:
        case 2:
        case 3:
            {
                cout<<"изучает   =>1\n";
                cout<<"неважно   =>0\n";
                cout<<"неизучает =>-1\n";
                int i;
                cin>>i;
                mas[con] = i;
                break;
            }
        case 101:
            {
                for_each(&mas[0], &mas[n], [](int x){cout<<x<<' ';});
                cout<<"\n";
            }
        }
    }
    return 0;
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
07.11.2011, 23:52     Есть ли ошибка? #10
Цитата Сообщение от IcyWind Посмотреть сообщение
не помогло...исправил тип в конструкторе
добавьте условие на проверку открытия файла
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
07.11.2011, 23:54  [ТС]     Есть ли ошибка? #11
эээ с файлами - беда...вообще не знаком с ними
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
08.11.2011, 00:03     Есть ли ошибка? #12
Цитата Сообщение от IcyWind Посмотреть сообщение
эээ с файлами - беда...вообще не знаком с ними
попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
if (FS.is_open()) {
    string Fam, pred;
    while(!FS.eof())
    {
        FS >> Fam;
        FS >> pred;
        data[pred].push_back(Fam);
    }
    FS.close();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2011, 00:18     Есть ли ошибка?
Еще ссылки по теме:

C++ У меня есть код. Ошибка conflicting type modifiers !
Есть ли ошибка в операторах C++
C++ Есть ошибка з циклом(посмотрите пожалуста)

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

Или воспользуйтесь поиском по форуму:
IcyWind
8 / 8 / 2
Регистрация: 19.09.2011
Сообщений: 268
08.11.2011, 00:18  [ТС]     Есть ли ошибка? #13
Вроде он пропустил...хм...значит - не открыт, зараза

Добавлено через 7 минут
ой блин, сори...я не в тот проект файл закидывал...

Добавлено через 1 минуту
Кстати, вернул стринг обратно на место char *. работает
Yandex
Объявления
08.11.2011, 00:18     Есть ли ошибка?
Ответ Создать тему
Опции темы

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