0x5DF9CCC8处出现未处理的异常

Unhandled exception at 0x5DF9CCC8

本文关键字:异常 未处理 0x5DF9CCC8      更新时间:2023-10-16

当我运行此代码时,写入时一切都很顺利,但当我按2读取时,一切都很好,但当它完成读取文件(显示函数)时,会弹出一个问题,显示"0x5DF9CCC8处未处理的异常",并带有break,continue选项。从我的搜索中,我认为问题来自一个指向Null的指针,但我不知道如何解决它。这是代码

class person{
public :
string name;
int id ;
int age ;
void person :: show();
void person :: add_menue();
void person :: insert_data();
void person :: show_data();
};
person personobject;
  void person :: add_menue()
{
    cout << "Please Enter Name ID Age :" << endl;
    cin >> name >> id >> age ;
}
ofstream file;
void person::show()
{
    cout<<"Age  => "<<age<<endl;
    cout<<"Name => "<<name<<endl;
    cout<<"ID   => "<<id<<endl;
}
void person :: insert_data()
{
    ofstream file;
    file.open("binary.dat",ios::app| ios::binary);
    personobject.add_menue();
    file.write((char*)&personobject, sizeof(personobject));
    file.close();
}
void person :: show_data()
{
    ifstream file;
    file.open("binary.dat",ios::in| ios::binary);
    if(!file)
    {
        cout<<"File not Found";
    }
    else
    {
        file.read((char*)&personobject, sizeof(personobject));
        while(!file.eof())
        {
            personobject.show();
            cout<<"Press Any Key....For Next Record"<<endl;
            getchar();
            file.read((char*)&personobject, sizeof(personobject));
            }
    }
    file.close();
}
void main ()
{
    int choice;
    cout << "1 - to write n2 - to  read" << endl;
    cin >> choice;
    if (choice==1)
    {
        person f;
        f.insert_data();
    }
    if (choice==2)
    {
        person a;
        a.show_data();
        system ("pause");
    }
}

因为您使用的是字符串对象,而不是纯字符数组,所以您不能只将整个类类型转换为char*并将其写入文件(这本身就是一种糟糕的方法。如果您更改参数的顺序并尝试加载一个旧文件会怎么样?)。

在insert_data函数中,单独编写每个变量,而不是强制转换整个类。你可以先写年龄和id,你知道这将占用8个字节,所以剩下的就是可以在read_data函数中加载回字符串对象的名称的大小。