为什么我在这看到一个段错误?

时间:2014-08-30 19:46:49

标签: c++

#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
using namespace std;

class student
{
    public:
    string s;
    int age;
};

ostream& operator<<( ostream &output,const student &s) 
{
      output << s.s << " " << s.age << "\n";
      return output;

}

istream& operator >>(istream& in, student& val) 
{
    return in >> val.s >> val.age;
}


bool valuecmp(const student & a, const student & b)
{
    return a.s < b.s;
}

int main (void)
{
    vector<student> a;
    student b;
    cin>>b.s;
    cin>>b.age;
    fstream myfile; 
    myfile.open("a1.txt",ios::app);
    int i = 0;
    myfile << b;
    cout<<"File has been written"<<"\n";
    myfile.open("a1.txt",ios::in);
    for (string line; getline(myfile, line);) 
    {
        istringstream stream(line);
        student person;
        stream >> person;
        a.push_back(person);
        cout<<a[i].s<<a[i].age<<"\n";
        i++;
    }
    sort(a.begin(),a.end(),valuecmp);
    fstream my;
    my.open("a2.txt",ios::out);
    student c;
    for ( i = 0; i < 2; i++ )
    {
        cout<<a[i].s<<a[i].age<<"\n";
        c = a[i];
        my << c;
    }   
    return 0;
}

一个接受用户输入,存储在对象中的简单程序。在运行此程序之前,我已在文件中有多个输入。因此,当我使该程序接受来自用户的输入时,写入一个文件,然后使用排序操作对整个文件的内容进行排序,然后将排序的输出写入新文件中。

接受用户输入,显示消息File has been written,但随后显示seg错误。为什么会这样?

1 个答案:

答案 0 :(得分:-1)

你在这一行上遇到了段错误

 cout<<a[i].s<<a[i].age<<"\n";

因为当您尝试访问a时它是空的。永远不会调用a.push_back(person),因此不会向您的向量添加任何数据。 getline()第一次失败。

希望这会引导您走向有用的方向。