退出时C ++程序崩溃(二进制文件)

时间:2014-12-21 20:22:11

标签: c++ struct binaryfiles

我制作了一个程序,将结构写入二进制文件,然后将该二进制文件读入另一个变量。写入文件并从中读取工作正常,但程序在退出时崩溃。

我尝试使用相同的变量进行阅读,但这不是我正在寻找的解决方案。我想知道当我将二进制文件中的结构读入另一个变量时程序崩溃的原因。

以下是代码:

#include <iostream>
#include <fstream>
#include <ctime>
#include <stdlib.h>

using namespace std;

struct t_student{
    string name;
    string lastname;
    int mark;
};

int main(){
    t_student student[30], student_read[30];
    int n, i;
    srand(time(0));

    fstream dat("student.dat", ios::in | ios::out | ios::binary | ios::trunc);

    cout << "Input number of students (up to 30): ";
    cin >> n;
    if(n > 30) n = 30;
    cout << endl;

    cin.ignore();
    for(i = 0; i < n; i++){
        cout << "Input first name: ";
        getline(cin, student[i].name);

        cout << "Input last name: ";
        getline(cin, student[i].lastname);

        student[i].mark = rand()%5+1;

        cout << endl;

        dat.write((char *) &student[i], sizeof(student[i]));
    }

    dat.clear();
    dat.seekg(0);
    i = 0;

    while(!dat.eof()){
        dat.read((char *) &student_read[i], sizeof(student_read[i]));
        if(dat.eof()) break;
        cout << endl << student_read[i].name << " " << student_read[i].lastname << "  -  " << student_read[i].mark;
        i++;
    }
    dat.close();

    cin.get();
    //exit(0);
}

正如您可能注意到的,我还添加了exit(0)函数,它可以防止程序崩溃,但我想知道程序首先崩溃的原因。

感谢您的帮助。

0 个答案:

没有答案