Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > fstream open в цыкле


Автор: mcbobo 29.4.2007, 21:56
Код

for (int i=0; i<kolvo; i++)
    s1.read(i);


Код

void student::read(int kolvo)
{
ifstream file;
file.open("student.txt", ios::in | ios::binary);
file.seekg(kolvo*sizeof(*this));
file.read((char *)this, sizeof(*this));
}

kolvo=count();
может и тут ошибка
Код

int student::count()
{
ifstream file;
file.open("student.txt", ios::binary);
file.seekg(0, ios::end);
return (int)file.tellg()/sizeof(*this);
}

так вот, компилю в VS2005 на ф7 всё компилит отлично, жму ф5 виснет
запускаю из папки debug всё отлично пашет
компилю как релиз - виснет при запуске
з.ы. убираю цикл всё тоже норм пашет

что не так?  smile 

Автор: archimed7592 29.4.2007, 22:07
уважаемый mcbobo, приносим свои извинения, но телепаты сегодня в отпуске...
могу сказать одно: если класс student содержит витуальные ф-ции или унаследован от класса, содержащего таковые, то 6-я строка ф-ции read творит большое зло и неудивительно почему виснет (так можно поступать только с POD-типами)...
ещё может влиять содержимое файла student.txt...

Автор: codelord 29.4.2007, 22:09
что мне не кажется замечательным множественное открытие файла без его закрытия,
но так как специфика функции не позволяет его закрывать (хотя.. ) короче 
смотри в сторону открытия его вне функции или открытия внутри функции тогда и закрытия там же

Автор: Daevaorn 29.4.2007, 22:18
Цитата(codelord @  29.4.2007,  23:09 Найти цитируемый пост)
что мне не кажется замечательным множественное открытие файла без его закрытия,

деструктор потока сам закрывает файл.
Цитата(codelord @  29.4.2007,  23:09 Найти цитируемый пост)
но так как специфика функции не позволяет его закрывать (хотя.. ) короче смотри в сторону открытия его вне функции или открытия внутри функции тогда и закрытия там же

Лучше открыть один раз, а уже потом читать в цикле.
Цитата(mcbobo @  29.4.2007,  22:56 Найти цитируемый пост)
так вот, компилю в VS2005 на ф7 всё компилит отлично, жму ф5 виснетзапускаю из папки debug всё отлично пашеткомпилю как релиз - виснет при запускез.ы. убираю цикл всё тоже норм пашет

вот интересно, а где этот student.txt находится? 

Автор: codelord 29.4.2007, 22:21
Цитата(Daevaorn @  29.4.2007,  18:18 Найти цитируемый пост)
Лучше открыть один раз, а уже потом читать в цикле

я разве с этим спорил ?

Автор: Любитель 29.4.2007, 22:28
codelord, деструктор ifstream всё закроет.

mcbobo, какие поля у твоего стьюдента? Каких типов?

Автор: codelord 29.4.2007, 22:38
Цитата(Daevaorn @  29.4.2007,  18:18 Найти цитируемый пост)
деструктор потока сам закрывает файл.

Цитата(Любитель @  29.4.2007,  18:28 Найти цитируемый пост)
codelord, деструктор ifstream всё закроет.

согласен, просто после FILE как то в глаза бросается.


Автор: mcbobo 29.4.2007, 23:31
Код

class student
{
public:
    char name[15];
    char surname[15];
    char otchestvo[15];
//    char fac[15];
    int god;
    int day;
    int month;

    struct session{
        char predmet[15];
        int ocenka;
    }ses[10][9];


    student();
    virtual ~student();
    void write(int num);
    void read(int kolvo);
    void del(int num);
    int count();
    void set_pos(int pos);

};

Автор: Любитель 29.4.2007, 23:34
mcbobo, ты ещё не ответил на хороший вопрос Daevaornа:
Цитата(Daevaorn @  29.4.2007,  22:18 Найти цитируемый пост)
вот интересно, а где этот student.txt находится? 


Автор: mcbobo 29.4.2007, 23:39
Любитель, в корне с экзешником

Автор: Daevaorn 29.4.2007, 23:46
Цитата(mcbobo @  30.4.2007,  00:39 Найти цитируемый пост)
 в корне с экзешником

а ты в debug working directory настроил?

Автор: mcbobo 29.4.2007, 23:56
Цитата(Daevaorn @ 29.4.2007,  23:46)
Цитата(mcbobo @  30.4.2007,  00:39 Найти цитируемый пост)
 в корне с экзешником

а ты в debug working directory настроил?

конешно нет )) я сёдня первый раз за vs сел, c 0 курсач пишу
так в дебаге терь компилится норм, в релизе терь ошибка

Код

Microsoft Visual Studio C Runtime Library has detected a fatal error in BaseofStud.exe.

Press Break to debug the program or Continue to terminate the program.

Автор: Любитель 30.4.2007, 00:04
Нажми брейк и посмотри куда вывалится. Если что - по колстэку поднимись до своих функций.

Автор: mcbobo 30.4.2007, 00:11
всё разобрался, спасибо всем огромное ))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)